gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 21:50:54 27 4
gpt4 key购买 nike

考虑一个简单的结构:

struct abc  
{
int a;
char b;
}

我在定义为其结构的变量中获得了一些值,现在我想打印以下内容。

*a = [some value]  
b = [some character]*

对于任意结构,无需为我遇到的每个结构编写转储...(...)函数的最佳方法是什么?

最佳答案

您似乎已经找到了解决方案,但我会扩展一下。

您所要求的称为 Reflection,即对象描述自身的能力。

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

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

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

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

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

然而,这个系统有一个限制:元编程与 OO 编程不能很好地结合。

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

void print(Base const& b) { boost::fusion::for_each<Base>(b, Print()); }

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

关于c++ - 打印 C++ 结构中所有字段的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2758937/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com