假设我有一个
struct foo { int bar; double baz; };
在某个地方struct foo s;
。我希望能够写magic(s)
并获得一个字符串或文本打印到cout,其中不仅包括s.bar和s.baz的值,还包括标识符'bar'和'baz'
我知道C ++没有适当的反思,但也许是一些RTTIish(我不是很精通RTTI)?或许还有一些小类装饰宣言?
注意:当然我要问的解决方案适用于任何类型,或至少任何结构;显然,我可以为operator<<
实现foo
。
答案 0 :(得分:2)
您可以实施:
inline std::ostream& operator<<(
std::ostream& os, // stream object
const foo& f
)
{
os << /*ToDo - nice formatting of data members*/
return os;
}
然后这将适用于cout
等:
foo f; cout << "My foo is " << f << ".";
答案 1 :(得分:0)
我们可能要等到C ++将反射功能添加到语言中。
这是由WG21 SG7积极开展的。那是什么? WG21是International Standards Organization(ISO)的工作组,负责开发C ++语言标准。第7研究组是负责探索可能性反思的小组。
SG7有Google Group,其中讨论了正在进行的工作。