![]() |
|
![]() ![]() ![]() |
|
BiTOk |
|
||||
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 23.12.2010 Репутация: нет Всего: нет |
Доброе время суток. Потребовалось сериализовать объект на основе моего класса. Класс такого вида:
где RulesList, VariableList, DomainList имеют такой вид:
Требуется упаковать объект класса ExpertSystem в файл и распаковать его из файла с минимальными затратами времени на реализацию этих действий. Сам попробовал зарегистрировать свой тип в метаобъектной системе Q_DECLARE_METATYPE(ExpertSystem), реализовать операторы << и >>, где в QDataStream просто совал rules_list_, variable_list_, domains_list_ и вызвать qRegisterMetaTypeStreamOperators для каждого из этих классов, но компилятор кричит на то, что не хватает реализации << и >> для RulesList, VariableList, DomainList. Дальше биться и пытаться реализовать это всё для каждого из озвученных классов не стал. Как лучше поступить - реализовать всё это для каждого из классов (странно, почему эти операторы не унаследовались от QVector) или есть иные, более быстрые пути для решения вопроса? |
||||
|
|||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 4 Всего: 110 |
да. использовать boost.serialization ![]() |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
Ты дурного не посоветуешь. ТС останется только реализовать сериализацию стандартных контейнеров Qt - фигня вопрос. ![]() Добавлено через 6 минут и 24 секунды BiTOk, начну с того, что наследовался от QVector ты зря. Такие классы лучше не наследовать. Ну или хотя бы приватно. Они не предназначены для этого. Переопредели эти методы. Получится не сильно длиннее, чем при использовании boost.serialization. |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 4 Всего: 110 |
что-то тут не так.. "стандартные контейнеры Qt" - это стёб, я полагаю? ![]() ибо какие же они стандартные, если их не может сериализовать сериализатор, сериализующий стандартные контейнеры? кто солгал? |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
||||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 4 Всего: 110 |
boost.serialization умеет сериализовать QVector? ![]() |
|||
|
||||
newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 1 Всего: 19 |
Такое наследование от кувектора - просто идиотизм. Определи операцию преобразования QString->Rule и будет тебе indexOf по строке, аналогично с двумя другими типами.
Если нужно быстро и сердито, а Rule и два других типа простые, держи самый джедайский метод: вытаскивай данные вектора через QVector::data() и напрямую сливай их в файл. -------------------- You're face to face With man who sold the world |
|||
|
||||
BiTOk |
|
|||
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 23.12.2010 Репутация: нет Всего: нет |
К сожалению, Rule и остальные классы сложные, там несколько полей, хоть и элементарных. Стало быть собрать просто так объекты не удастся, надо писать код сериализации? |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
да. надеюсь, ты тупишь только из-за недосыпа... когда речь идет о Qt, то под стандартными подразумеваются средства Qt. Естественно в Qt есть свой сериализатор, который умеет работать с контейнерами входящими в состав Qt. |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 4 Всего: 110 |
повторю. как слово "стандартный" соприкасается с куте?! ![]() зы так и вижу ситуацию, когда bsa приходит в аптеку за аспирином, а ему говорят что стандартного аспирина нет, есть только самопальный. bsa спрашивает: "а этот самопальный, соответствует стандарту?", на что ему отвечают: "нет. он просто так же называется.". но следуя логике bsa, он его обязательно купит, и даже всем рекомендовать будет, ибо не понимает смысл слова "стандарт". страшно жить... :facepalm Добавлено @ 10:41 не исключено... но почему так долго не отпускает? ![]() Это сообщение отредактировал(а) boostcoder - 9.12.2011, 11:34 |
|||
|
||||
newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 1 Всего: 19 |
Qt ведь совместим со стандартными (которые в std) алгоритмами и итераторами... Если сериализатор работает через них, то и кутешные вектора должен уметь сериализовать.
-------------------- You're face to face With man who sold the world |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
точно так же, как и слово "стандартный" со словом "сериализатор".
|
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 4 Всего: 110 |
а разве сериализатор стандартный? он ведь просто умеет сериализовать стандартные контейнеры ![]() |
|||
|
||||
spyswamp |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 349 Регистрация: 18.8.2006 Репутация: 1 Всего: 7 |
Модератор: Сообщение скрыто. -------------------- - why you call it beta? - cuz it's betta then nothin' |
|||
|
||||
spyswamp |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 349 Регистрация: 18.8.2006 Репутация: 1 Всего: 7 |
Мог бы мат просто закрыть. Лол.
-------------------- - why you call it beta? - cuz it's betta then nothin' |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |