我知道它不受支持,但我想知道是否有什么技巧可以绕过它。有什么建议吗?
发布于 2015-08-10 04:04:53
小贴士和窍门总是存在的。看看Metaresc库https://github.com/alexanderchuranov/Metaresc
它为类型声明提供了接口,该接口也将为类型生成元数据。基于元数据,您可以轻松地序列化/反序列化任何复杂性的对象。开箱即用,您可以序列化/反序列化XML、JSON、XDR、类似Lisp的表示法、C-init表示法。
下面是一个简单的例子:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "metaresc.h"
TYPEDEF_STRUCT (point_t,
double x,
double y
);
int main (int argc, char * argv[])
{
point_t point = {
.x = M_PI,
.y = M_E,
};
char * str = MR_SAVE_XML (point_t, &point);
if (str)
{
printf ("%s\n", str);
free (str);
}
return (EXIT_SUCCESS);
}
此程序将输出
$ ./point
<?xml version="1.0"?>
<point>
<x>3.1415926535897931</x>
<y>2.7182818284590451</y>
</point>
对于最新的gcc和clang来说,这个库在Linux、MacOs、FreeBSD和Windows上都能正常工作。自定义宏语言是其中一个选项。用户可以像往常一样进行声明,并从DWARF调试信息生成类型描述符。这将复杂性转移到构建过程中,但使采用变得容易得多。
发布于 2009-08-30 03:51:28
根据对How can I add reflection to a C++ application? (Stack Overflow)的响应,以及C++被认为是C的“超集”的事实,我想说你走运了。
关于why C++ doesn't have reflection (Stack Overflow)也有一个很好的长篇答案。
发布于 2009-08-30 03:59:17
你需要从头开始实现它。在纯C语言中,没有任何关于结构和复合类型的运行时信息。元数据根本不存在于标准中。
https://stackoverflow.com/questions/1353022
复制相似问题