我正试图找出一种在c中进行半继承的好方法。
这就是我提出的
//statemachine.h
...
#define CHANGE_STATE(newState) \
do { \
printf("[%s]->", stateStrings[state]); \
state = newState; \
printf("[%s]\r\n", stateStrings[state]); \
} while (0)
//trafficlight.c
#include "trafficlight.h"
#include "statemachine.h"
// Is a state machine
typedef enum {
green,
yellow,
red
} traffic_state;
static const char * stateStrings [] = {
"green",
"yellow",
"red"
};
static traffic_state state = red;
// Move to the next signal
void lightChange(void) {
CHANGE_STATE((state+1)%3);
}
想要成为状态机的任何模块(即使用CHANGE_STATE)的想法必须定义state和stateStrings。
只是寻找有关此方法的反馈。
编辑:
问题已移至codereview
答案 0 :(得分:1)
使用继承的一种常用方法是在struct
- s中使用强制转换,struct
,并模仿vtables(即指向包含函数指针的常量struct
的指针)。
在GTK里面的Glib内找到GObject里面的例子。阅读Gobject documentation并研究实现GObject的许多宏。