如何在其字段被命名的情况下打印结构?

时间:2015-07-21 13:16:58

标签: c++ reflection pretty-print

假设我有一个

struct foo { int bar; double baz; };

在某个地方struct foo s;。我希望能够写magic(s)并获得一个字符串或文本打印到cout,其中不仅包括s.bar和s.baz的值,还包括标识符'bar'和'baz'

我知道C ++没有适当的反思,但也许是一些RTTIish(我不是很精通RTTI)?或许还有一些小类装饰宣言?

注意:当然我要问的解决方案适用于任何类型,或至少任何结构;显然,我可以为operator<<实现foo

2 个答案:

答案 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积极开展的。那是什么? WG21International Standards Organization(ISO)的工作组,负责开发C ++语言标准。第7研究组是负责探索可能性反思的小组。

SG7有Google Group,其中讨论了正在进行的工作。