如何在C中定义包含枚举的通用数据类型?

时间:2014-11-05 15:14:36

标签: c oop enums

我正在尝试在c中定义一个通用宏,它在状态机中执行状态转换并且" logs"关于状态转换的一些数据(转换的原因和完成的转换次数)。

由于这种方法应该在多个状态机中使用,我想使用通用宏,如:

#define STATE_TRANSITION(state_variable, new_state, reason)  /
    state_variable.state = new_state;   /          /* new_state is an enum value */
    state_variable.transition_reason = reason; /   /* reason is an enum value */
    state_variable.state_transition_counter++;     /* the counter may overflow */

为了使这成为可能,我想到像这样的州类型

struct specific_state {
    enum POSSIBLE_STATES state;
    enum STATE_TRANSITION_REASONS transition_reason;
    uint8 state_transition_counter;
}

可用于特定的状态机。

为了确保每个状态使用相同的结构(使宏工作),我尝试使用某种父类型作为状态。 我的问题是枚举POSSIBLE_STATES和枚举STATE_TRANSITION_REASONS可能因不同的状态机而异。 但是我结构中唯一的通用成员是state_transition_counter:)

我现在的问题是:

是否有可能在c中定义一个代表基数"类"像:

struct debuggable_state {
    enum state;
    enum transition_reason;
    uint8 state_transition_counter;
}

之后可以进行子类化(应用特定的枚举类型)?

也许我会用内联函数替换宏以使其类型安全,但我仍然不确定我的方法是否可行。

1 个答案:

答案 0 :(得分:0)

您可以使用int而不是通用结构中的枚举,无论如何,枚举都表示为int ..