一个未知对象的序列化

Serialization of an unknown object

本文关键字:对象 序列化 未知 一个      更新时间:2023-10-16

我一直在寻找能够序列化完全未知对象的东西。

我知道Qt有一个序列化功能,也适用于qvariant对象。这是否意味着我可以将任何复杂的对象传递给QVariant(即也有指针和/或指针循环的东西)并序列化该对象?

序列化似乎也不支持boost::any。

由于c++中缺乏反射,如果不编写自己的特定类型序列化例程,这是不可能的吗?

您可以序列化任何QVariant,只要您期望QVariant所携带的所有类型都定义了它们的QDataStream操作符。对于你自己的自定义类型,你需要有这些操作符然后它就能正常工作了

是的,不编写自己的序列化代码是不可能做到这一点的,因为c++没有反射。

虽然c++没有反射,但如果您使用QObjects和Qt属性系统,则有可能在Qt中获得有限的反射。

编写代码来序列化和反序列化任何QObject的所有属性是相当容易的。[提示:有一些方法可以检索QObject的所有属性。这里的权衡是,你希望序列化的所有东西都必须是一个QObject(并且QObject不能有复制构造函数),并且你的getter和setter必须使用属性。使用一些聪明的宏,从编码的角度来看,这不是太大的问题。