Qt Должен ли я наследовать от QDataStream? - PullRequest
0 голосов
/ 11 марта 2010

В настоящее время я использую QDataStream для сериализации моих классов. У меня довольно много моих собственных классов, которые я часто сериализую. Должен ли я получить QDataStream для создания своего собственного класса DataStream? Или есть лучший образец, чем этот? Обратите внимание, что эти пользовательские классы используются во многих наших проектах, поэтому, возможно, это облегчит кодирование.

Еще один способ сформулировать этот вопрос: когда фреймворк предоставляет вам класс сериализации, как вы справляетесь с сериализацией своих собственных классов пользовательских типов, чтобы вам не приходилось помнить, как их сериализовывать каждый раз (повышайте удобство использования) а также следуя лучшим практикам разработки программного обеспечения (следуя шаблонам).

Ответы [ 2 ]

4 голосов
/ 11 марта 2010

Это очень быстро выйдет из-под контроля. Лучший подход - определить operator<< и operator>> между QDataStream и вашим классом. Даже чище может быть просто иметь методы сериализации в ваших классах, которые читают / записывают в QDataStream (так что вы можете вызвать, например, obj->serialize(myStream)).

0 голосов
/ 11 марта 2010

В настоящее время я работаю с этим следующим образом:

Вместо того, чтобы наследовать от QDataStream, я создаю класс сериализатора для каждого объекта, который мне нужно сериализовать.

Например, если у меня есть:

class MyOwnClass

Я бы тогда создал класс с именем:

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

Причина, по которой я не добавил

QByteArray serialize() const;
От

до class MyOwnClass, так что люди могут использовать MyOwnClass без зависимости от Qt. Также не все клиенты MyOwnClass заинтересованы в сериализации класса.

Любые комментарии приветствуются! =)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...