Russian Qt Forum
Ноябрь 23, 2024, 23:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QDataStream. Как лучше сделать.  (Прочитано 3211 раз)
levcom
Гость
« : Июль 23, 2012, 12:43 »

Разрабатываю реализацию протокола на Qt. Для более простого использования библиотеки применяю по возможности "родные" Qt-типы (qint16, qint32, QDataStream). Однако строчные значения (string) по спецификации протокола сериализуются в бинарный вид отлично от того как это реализовано в QtCore (QString). То при чтении из потока хочется получить QString и использовать стандартные операторы >> <<. Как выйти с наименьшими жертвами - т.е. читать из QDataStream.
Записан
Akon
Гость
« Ответ #1 : Июль 23, 2012, 13:48 »

Сделать класс QStringHolder для нужной вам сериализации строки в QDataStream.
Записан
levcom
Гость
« Ответ #2 : Июль 23, 2012, 15:24 »

Сделать класс QStringHolder для нужной вам сериализации строки в QDataStream.

Приведите хотя бы элементарный пример.
Я так понимаю, Вы предлагаете наследовать QStringHolder : public QString
и перегрузить соответствующие operator >> << в QDataStream?
Записан
Akon
Гость
« Ответ #3 : Июль 23, 2012, 15:39 »

Нет, я категорически против наследования в данном случае. QStringHolder просто держит QString, как, например, смарт-поинтер держит указатель. Просто для QStringHolder можно будет сделать перегрузку глобальных операторов <<, >> c нужным форматом.
Записан
levcom
Гость
« Ответ #4 : Июль 25, 2012, 16:16 »

Нет, я категорически против наследования в данном случае. QStringHolder просто держит QString, как, например, смарт-поинтер держит указатель. Просто для QStringHolder можно будет сделать перегрузку глобальных операторов <<, >> c нужным форматом.



Код:
class QStringHolder
{
public:
    QStringHolder() { }

    friend QDataStream& operator<<(QDataStream& stream, const QStringHolder& value);
    friend QDataStream& operator>>(QDataStream& stream, QStringHolder& value);

    QString str;
};

т.е. если мне надо считать в securityPolicyUri.

QStringHolder st;
QString policyUri;

QDataStream stream;
stream >> st;
policyUri = st.str;

как-то не очень удобно.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.046 секунд. Запросов: 20.