我目前使用QDataStream来序列化我的类。我有很多我自己的类,我经常序列化。我应该派生QDataStream来创建我自己的DataStream类吗?还是有比这更好的模式?请注意,我们的许多项目都使用这些自定义类,因此可能会这样做会使编码更容易。Qt我应该从QDataStream派生吗?
另一种解释这个问题的方法是:当一个框架为您提供一个序列化类时,您如何处理序列化您自己的自定义类的类,以便您不必记住每次如何序列化它们(增强可用性),并遵循最佳的软件工程实践(遵循模式)。
我目前使用QDataStream来序列化我的类。我有很多我自己的类,我经常序列化。我应该派生QDataStream来创建我自己的DataStream类吗?还是有比这更好的模式?请注意,我们的许多项目都使用这些自定义类,因此可能会这样做会使编码更容易。Qt我应该从QDataStream派生吗?
另一种解释这个问题的方法是:当一个框架为您提供一个序列化类时,您如何处理序列化您自己的自定义类的类,以便您不必记住每次如何序列化它们(增强可用性),并遵循最佳的软件工程实践(遵循模式)。
这会很快失去控制。更好的方法是在QDataStream
和你的班级之间定义operator<<
和operator>>
。即使更干净也可能只是在您的类上读取/写入QDataStream
的序列化方法(例如,您可以调用obj->serialize(myStream)
)。
我正在处理这个目前的方法是如下:
而不是从QDataStream派生,我为每一个对象,我需要序列化一个序列化器类。
举例来说,如果我有:
class MyOwnClass
然后我会创建一个名为类:
class MyOwnClassSerializer
{
public:
static QByteArray const serialize(MyOwnClass const&);
};
,为什么我没有添加
QByteArray serialize() const;
的缘故class MyOwnClass
是让人们可以使用MyOwnClass
而不依赖于Qt。并不是所有的MyOwnClass
客户都有兴趣序列化这个类。
任何意见将不胜感激! =)
''<<' and '>>'操作符将作为序列化程序类。他们不必定义数据类,而是独立的函数。 – 2010-03-11 20:36:07
我应该在哪里放置最好的方式运行'>>和'<<'运算符?在一对.h和.cpp中以及对于每种新数据类型,我只需添加到该组文件中? – sivabudh 2010-03-11 20:41:34
如果你不想让这些类依赖于Qt,那么单独的文件是唯一的方法。否则,我会将它们定义在与数据类相同的文件中。 – 2010-03-11 21:17:28