【发布时间】:2015-07-21 13:16:58
【问题描述】:
假设我有一个
struct foo { int bar; double baz; };
还有一个struct foo s; 在某处。我希望能够编写magic(s) 并获得一个字符串或打印到 cout 的文本,其中不仅包括 s.bar 和 s.baz 的值,还包括标识符 'bar' 和 'baz'。
我知道 C++ 没有适当的反射,但可能是 RTTIish(我不精通 RTTI)?或者也许对类声明进行一些小装饰?
注意:当然,我问的是一种适用于任何类型或至少适用于任何结构的解决方案;显然我可以为foo 实现一个operator<<。
【问题讨论】:
-
二进制文件中不存在变量名。你需要更广泛的东西,恕我直言。
-
@SouravGhosh:1. 我说的是字段名,不是变量名,还有 2. 你说得对,但二进制文件可能有调试符号;或其他类型的仪器。
-
此外,这很可能是 C 和 C++ 之间的解决方案(如果存在)不同的情况。删除其中一个标签。
-
@BaummitAugen:是的,我想你是对的。
-
不幸的是,大多数反射特性尚未标准化,但有趣的是,当前 C++1z 的反射提议确实允许您迭代类成员。
标签: c++ reflection pretty-print