2010-03-11 35 views
0

我目前使用QDataStream来序列化我的类。我有很多我自己的类,我经常序列化。我应该派生QDataStream来创建我自己的DataStream类吗?还是有比这更好的模式?请注意,我们的许多项目都使用这些自定义类,因此可能会这样做会使编码更容易。Qt我应该从QDataStream派生吗?

另一种解释这个问题的方法是:当一个框架为您提供一个序列化类时,您如何处理序列化您自己的自定义类的类,以便您不必记住每次如何序列化它们(增强可用性),并遵循最佳的软件工程实践(遵循模式)。

回答

4

这会很快失去控制。更好的方法是在QDataStream和你的班级之间定义operator<<operator>>。即使更干净也可能只是在您的类上读取/写入QDataStream的序列化方法(例如,您可以调用obj->serialize(myStream))。

0

我正在处理这个目前的方法是如下:

而不是从QDataStream派生,我为每一个对象,我需要序列化一个序列化器类。

举例来说,如果我有:

class MyOwnClass 

然后我会创建一个名为类:

class MyOwnClassSerializer 
{ 
public: 
    static QByteArray const serialize(MyOwnClass const&); 
}; 

,为什么我没有添加

QByteArray serialize() const; 

的缘故class MyOwnClass是让人们可以使用MyOwnClass而不依赖于Qt。并不是所有的MyOwnClass客户都有兴趣序列化这个类。

任何意见将不胜感激! =)

+1

''<<' and '>>'操作符将作为序列化程序类。他们不必定义数据类,而是独立的函数。 – 2010-03-11 20:36:07

+0

我应该在哪里放置最好的方式运行'>>和'<<'运算符?在一对.h和.cpp中以及对于每种新数据类型,我只需添加到该组文件中? – sivabudh 2010-03-11 20:41:34

+1

如果你不想让这些类依赖于Qt,那么单独的文件是唯一的方法。否则,我会将它们定义在与数据类相同的文件中。 – 2010-03-11 21:17:28

相关问题