我正在尝试在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;
}
之后可以进行子类化(应用特定的枚举类型)?
也许我会用内联函数替换宏以使其类型安全,但我仍然不确定我的方法是否可行。
答案 0 :(得分:0)
您可以使用int而不是通用结构中的枚举,无论如何,枚举都表示为int ..