我正在阅读这篇文章(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)为文本序列化/反序列化创建元数据
如果可能的话,一步到位。
答案 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
}
}