使用宏定义结构和 str 字典

Defining a struct along with a str dictionary using a macro

我正在尝试在我的代码中自动生成结构,其语法由 Midas Library 指定。这里的难点在于并行构建 const char* 模仿结构定义的字典:

typedef struct {
  BOOL      runColdStartScript;
  BOOL      runPedestalScript;
  BOOL      triggerCommunicationTest;
  BOOL      updateOdbParameters;
  BOOL      runCmdBuffer;
  BOOL      runSelectedScript;
} myHotLink;
myHotLink hotLinkContainer{};
const char *hot_links_str[9] = { \
  "[.]", \
  "runColdStartScript = BOOL : n", \
  "runPedestalScript = BOOL : n", \
  "triggerCommunicationTest = BOOL : n", \
  "updateOdbParameters = BOOL : n", \
  "runCmdBuffer = BOOL : n", \
  "runSelectedScript = BOOL : n", \
  "", nullptr 
};

理想情况下,我想用宏生成这段代码。例如:

MAKE_HOT_LINK(
  myHotLink,
  { BOOL, runColdStartScript, n },
  { BOOL, runPedestalScript, n },
  ...
)

有人知道如何定义(并正确调用)MAKE_HOT_LINK 宏吗?

干杯!

您可以使用一些元宏来定义您想要的字段,以及一些将这些扩展到声明和描述符的其他宏:

#define MYHOTLINK_FIELDS(M) \
    M(BOOL, runColdStartScript, n) \
    M(BOOL, runPedestalScript, n) \
    M(BOOL, triggerCommunicationTest, n) \
    M(BOOL, updateOdbParameters, n) \
    M(BOOL, runCmdBuffer, n) \
    M(BOOL, runSelectedScript, n) \

#define FIELD_DECL(TYPE, NAME, TAG)  TYPE NAME;
#define FIELD_DESCRIPTOR(TYPE, NAME, TAG)   #NAME " = " #TYPE " : " #TAG,

#define DECLARE_STRUCT(STYPE) struct { STYPE(FIELD_DECL) }
#define STRUCT_DESCRIPTOR(STYPE) { "[.]", STYPE(FIELD_DESCRIPTOR) "", nullptr }

typedef DECLARE_STRUCT(MYHOTLINK_FIELDS) myHotLink;
myHotLink hotLinkContainer {};
const char *hot_links_str[] = STRUCT_DESCRIPTOR(MYHOTLINK_FIELDS);

会扩展到(等同于)您上面的内容。