Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从C+;中的POD结构获取可用数据成员列表+;_C++ - Fatal编程技术网

C++ 从C+;中的POD结构获取可用数据成员列表+;

C++ 从C+;中的POD结构获取可用数据成员列表+;,c++,C++,这个问题听起来有点不寻常。让我们采取POD结构: struct MyStruct { int myInt; double myDouble; AnotherPOD* myPointer; }; 编译器知道可用数据成员的列表。您知道在编译时(更好)或运行时获取数据成员名称(和类型)列表的方法吗 我有大量的POD结构,我想自动化operator的创建我不知道有什么方法可以直接做你想做的,但是你可能想看看clang,它是一个编译器前端实现,你可以利用它来做其他事情: 我猜你可以遍

这个问题听起来有点不寻常。让我们采取POD结构:

struct MyStruct
{
   int myInt;
   double myDouble;
   AnotherPOD* myPointer;
};
编译器知道可用数据成员的列表。您知道在编译时(更好)或运行时获取数据成员名称(和类型)列表的方法吗


我有大量的POD结构,我想自动化operator的创建我不知道有什么方法可以直接做你想做的,但是你可能想看看clang,它是一个编译器前端实现,你可以利用它来做其他事情:


我猜你可以遍历它创建的抽象语法树,得到你所要的信息。

< P>,标准C++编译器不能做到这一点,它们缺乏反射能力。
听起来像是代码生成器的任务。因此,要么使用工具箱从头中提取这些信息,要么从另一个源中生成头和序列化函数。请确认。

我恐怕是C++不支持反射。您可以使用在编译时实现受限形式的反射。

引入了编译时反射(非常棒)


当然,这取决于您将其映射到运行时反射,这不会太容易,但这是有可能的,而不是相反的:)

可能的重复使用复杂的模板和添加一些宏(如
REGISTER\u MEMBER(MyStruct::myInt)
,您可能会得到一些有用的东西。但下面的答案指出的现有工具可能不会那么痛苦。您是以二进制还是文本输出?我假设您可能正在输出文本,因为您正在使用operatorI需要文本版本,但是我很好奇。哪一个是适合二进制的非常简单的解决方案?代码生成听起来确实是最好的方法,这样你只需要编写操作符就可以了。在此处发布了详细代码: