2

我正在阅读这篇文章(通过(ab)使用预处理器进行的结构迭代),其中作者使用 x-macrosoffsetof并将元数据添加到结构中,这将允许其成员轻松序列化、按名称访问等。但它只是为原始结构元素实现。

是否可以将其扩展为包含嵌套结构的结构?即允许对以下内容进行简单的反序列化的东西:

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

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

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

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

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

(澄清)

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

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

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

4

1 回答 1

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
  }
}
于 2021-06-01T12:49:11.923 回答