我一直在寻找能够序列化完全未知物体的东西。
我知道Qt有serialization功能,也适用于qvariant个对象。这是否意味着我可以将任何复杂的对象传递给QVariant(即也有指针和/或指针循环的东西)并序列化该对象?
似乎boost::any isn't supported by serialization。
由于C ++缺乏反射而没有编写我自己的特定类型序列化例程,这是不可能做到的?
答案 0 :(得分:2)
只要您希望QVariant
携带的所有类型都定义了QVariant
个运算符,您就可以序列化QDataStream
。因此,对于您自己的自定义类型,您需要使用这些运算符,然后它才能正常工作。
答案 1 :(得分:1)
是的,如果不编写自己的序列化代码就不可能做到这一点,因为C ++没有反射。你差不多想通了。
答案 2 :(得分:0)
虽然C ++没有反射,但如果QObjects和Qt Property System,则可能在Qt中得到有限的反射。
编写代码来序列化和反序列化任何QObject的所有属性都相当容易。 [提示:有一些方法可以检索QObject的所有属性。]这里的权衡是你希望序列化的所有东西都必须是QObject(并且QObjects不能有拷贝构造函数),你的getter和setter必须使用属性。对于一些聪明的宏,从编码的角度来看,这不是一个大问题。