是否可以(递归)"内省"使用x-macros嵌套的C结构?

时间:2017-04-12 16:53:22

标签: c reflection macros preprocessor x-macros

我正在阅读这篇文章(Struct iteration through (ab)use of the preprocessor),其中作者使用x-macros和offsetof将元数据添加到结构体中,这样可以轻松地对其成员进行序列化,按名称访问等。但它只针对原始struct元素实现。

是否可以将此扩展为包含嵌套结构的结构?即允许对以下内容进行简单的de / serialial化的东西:

struct some_struct {
   int x, y, z;
}; 

struct data {
   int number;
   struct some_struct something;
}; 

我注意到作者在开头说明了这一点:

  

在这个阶段,结构只包含原始元素(int,float,char等)。 处理嵌套的结构,联合,位域和指针需要额外的工作(这可能是未来帖子的主题)。

使用C预处理器可以实现这样吗?

(适用澄清)

为了更清楚,我想看看是否有办法可以让我:

a)定义struct
  b)为文本序列化/反序列化创建元数据

如果可能的话,一步到位。

1 个答案:

答案 0 :(得分:1)

您要求的一切都在此处实现https://github.com/alexanderchuranov/Metaresc

这是一个示例应用:

#include <metaresc.h>

TYPEDEF_STRUCT (some_struct_t,
                int x,
                int y,
                int z,
                );

TYPEDEF_STRUCT (data_t,
                int number,
                (struct some_struct_t, something),
                );  

int main (int argc, char * argv[])
{
  data_t data = { 1, { 2, 3, 4 } };
  MR_PRINT ("data = ", (data_t, &data));
  return (EXIT_SUCCESS);
}

预期输出:

data = {
  .number = 1,
  .something = {
    .x = 2,
    .y = 3,
    .z = 4
  }
}