c继承的实现

时间:2014-09-18 17:12:58

标签: c inheritance macros

我正试图找出一种在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

1 个答案:

答案 0 :(得分:1)

使用继承的一种常用方法是在struct - s中使用强制转换,struct,并模仿vtables(即指向包含函数指针的常量struct的指针)。

在GTK里面的Glib内找到GObject里面的例子。阅读Gobject documentation并研究实现GObject的许多宏。