打印C++结构中所有字段的值

Zhi*_*aas 20 c++ structure visual-c++

考虑一个简单的结构:

struct abc  
{  
    int a;  
    char b;  
}  
Run Code Online (Sandbox Code Playgroud)

我在一个定义为其结构的变量中得到了一些值,现在我想打印下面的内容.

*a = [some value]  
b = [some character]*
Run Code Online (Sandbox Code Playgroud)

对于任意结构实现此目的的最佳方法是什么,而不必为我遇到的每个结构编写dump ...(...)函数?

Mat*_* M. 28

看来你已经找到了解决方案,但我会稍微扩展一下.

你要求的是被称为Reflection,即对象描述自身的能力.

由于元数据,大多数语言都实现了反射,例如在python中,对象的函数和属性存储在字典元素中.

与C#或Java不同,C++没有任何本机反射系统,这会阻止(例如)这种自动打印/序列化或反序列化.

但是,C++具有非常强大的元编程支持,它允许我们(通过使用模板)模拟反射(在编译时).这通常使用Boost.Fusion来完成,这个库用于从编译时到运行时的交叉.

如链接中演示的示例,BOOST_FUSION_ADAPT_STRUCT宏允许您采用标准struct并为其提供所需的接口以将其视为Fusion.Sequence.

另一个例子是使用Fusion.VectorFusion.Map存储类的属性,然后将此Sequence公开给自动打印/序列化/反序列化方法.

然而,该系统存在限制:元编程与OO编程不能很好地融合.

struct Base { char a; };            // Adapt
struct Derived: Base { char b; };   // Adapt

void print(Base const& b) { boost::fusion::for_each<Base>(b, Print()); }
Run Code Online (Sandbox Code Playgroud)

只打印Base(这里a)的成员.使用多态时,您需要virtual在某一点使用方法:)


JSB*_*ոգչ 0

没有,C++ 中没有。倒霉。


归档时间:

查看次数:

31316 次

最近记录:

6 年,6 月 前