gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 04:40:52 24 4
gpt4 key购买 nike

我试图在 c 中定义一个通用宏,它在状态机中执行状态转换并“记录”状态转换的一些数据(转换的原因和完成的转换次数)。

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

#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;
}

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

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

最佳答案

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

关于c - 如何在 C 中定义包含枚举的通用数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26760574/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com