序列化未知对象

时间:2016-08-10 11:31:55

标签: c++ qt serialization boost

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

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

似乎boost::any isn't supported by serialization

由于C ++缺乏反射而没有编写我自己的特定类型序列化例程,这是不可能做到的?

3 个答案:

答案 0 :(得分:2)

只要您希望QVariant携带的所有类型都定义了QVariant个运算符,您就可以序列化QDataStream。因此,对于您自己的自定义类型,您需要使用这些运算符,然后它才能正常工作。

答案 1 :(得分:1)

是的,如果不编写自己的序列化代码就不可能做到这一点,因为C ++没有反射。你差不多想通了。

答案 2 :(得分:0)

虽然C ++没有反射,但如果QObjects和Qt Property System,则可能在Qt中得到有限的反射。

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