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

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

Страниц: 1 ... 5 6 [7] 8   Вниз
  Печать  
Автор Тема: Сериализация (как сделать поудобнее)  (Прочитано 48090 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #90 : Февраль 08, 2013, 18:34 »

А я предлагаю добавить класс:
Тут согласен, смысл есть
Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #91 : Февраль 08, 2013, 18:38 »

Какой "каждой структуре" Непонимающий Речь шла о полиморфных классах уже имеющих общую базу.
А я вот и жду, узнаем мы наконец-то, что конкретно Вы собираетесь сериализовать и куда. Началось со структур по сети, потом "vectot<int>, vectot<float>", теперь и до полиморфных классов добрались. Или Вы хотите универсальный метод для всего сразу изобрести? Улыбающийся
Записан

Пока сам не сделаешь...
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #92 : Февраль 08, 2013, 18:42 »

То есть если код труден для поддержки - некомпетентны поддерживающие? А почему Вы не допускаете мысли что он просто-напросто спланирован плохо, так сказать "жертва увлечения общностью"? Заметим что даже и в случае если Вы правы - возможно такого кода лучше не иметь.
Да. Вы заказываете у человека готовый код и согласовываете использование шаблонов. Человек вам делает этот код на шаблонах.
А когда вы хотите сами в нем что-то изменить  оказывается, что вы в этом ничего не понимаете и сделать ничего не можете.
После этого вы обвиняете всех кроме себя. Учитесь или не заказываете такой код.

А зачем Вы навесили уже 4 класса?
Это называется иерархия классов. В дальнейшем, при развитии проекта, они наполнятся содержимым. Улыбающийся


Зачем тащить QDataStream (и каждый такой stream) если мы хотим от него только операторы?
Мы хотим иметь архивы, которые позволяют сериализоваться в разные форматы (бинарный, текстовый, xml, json, ...)
Вот для примера я привел сериализацию в бинарный формат с использованием QDataStream?

Все в 1 хедере. Чего не хватает?
Это конечно большое достижение. Улыбающийся
Кстати, у меня тоже все было в одном хедере.

Ну значит QDataStream дурной тон - получает в конструкторе указатель на QIODevice Улыбающийся
Да.

Но не член точно  
Комплексы? Улыбающийся
Конечно лучше создавать объект на куче руками, а потом героически не забывать его удалить. Это же круто. Улыбающийся
Но это круто только в школьных проектах.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #93 : Февраль 08, 2013, 19:08 »

Учитесь или не заказываете такой код.
Ролью учителя лучше не увлекаться  Улыбающийся

Это называется иерархия классов. В дальнейшем, при развитии проекта, они наполнятся содержимым. Улыбающийся
...
Мы хотим иметь архивы, которые позволяют сериализоваться в разные форматы (бинарный, текстовый, xml, json, ...) Вот для примера я привел сериализацию в бинарный формат с использованием QDataStream?
А какой ф-ционал Вы хотите поместить напр в qds_iarchive? Зачем нужен класс который никакой смысловой нагрузки не несет? Все делает QDataStream (или др базовый stream), archive просто обертка. Хотите разные форматы - ну и создавайте "инстансы". Почему не потемплейтить если это к месту?

Конечно лучше создавать объект на куче руками, а потом героически не забывать его удалить. Это же круто. Улыбающийся
Но это круто только в школьных проектах.
А я и не хочу ничего удалять, могу создать этот оберточный класс где хочу и мне это ничем не грозит.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #94 : Февраль 08, 2013, 19:18 »

Ролью учителя лучше не увлекаться  Улыбающийся
А я никого не учу.
Перечитайте сообщение - там о другом. Улыбающийся

А какой ф-ционал Вы хотите поместить напр в qds_iarchive?
Все. Здесь все делает бэкэнд QDataStream, а вот если я захочу в качестве бэкэнда использовать QDomDocument для сериализации в xml, то придется добавлять.

Почему не потемплейтить если это к месту?
Потому что потом это, возможно, придется кому-то сопровождать... Вы же сами выше жаловались. Улыбающийся

А я и не хочу ничего удалять, могу создать этот оберточный класс где хочу и мне это ничем не грозит.
Ага-ага, а через пол года - захотел, а еще через пол года понял что течет, а еще через пол года переделок все починил. Перелопатив пол проекта.
А если еще и участников в проекте несколько,... можно и не завершиться никогда. Улыбающийся
И заметь те это все только из-за комплексов.

« Последнее редактирование: Февраль 08, 2013, 19:20 от Old » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #95 : Февраль 08, 2013, 19:29 »

Ага-ага, а через пол года - захотел, а еще через пол года понял что течет, а еще через пол года переделок все починил. Перелопатив пол проекта.
Ну бывает и так - и это нормально, если не слишком часто. Но почему Вы решили что членство "есть правильно"? Только потому что "кто-то так сказал/написал?" Я замечал что именно вещи "принимаемые без доказательств" ведут к самым тяжелым ошибкам и переделкам.

Ну ладно, то все "цветочки". А вот как сохранять указатели/ссылки на объекты если сам сериализуемый объект их не создает и не удаляет? Что Вы об этом думаете?

Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #96 : Февраль 08, 2013, 19:37 »

Потому что потом это, возможно, придется кому-то сопровождать... Вы же сами выше жаловались. Улыбающийся
Пример: посидели с друзьями, приняли пару литров для оживления беседы. Не вижу в этом ничего плохого. А вот если каждый день спозаранку пьян - разница есть?  То же и здесь - открываете, а там аж кишит, все на темплейтах, живого места просто нету. Чему же это все посвящено? После неск дней "вникания" - да ничему путному, заигрался в общность, вот и все. Словом - злоупотребляют  Плачущий   
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #97 : Февраль 08, 2013, 19:55 »

Но почему Вы решили что членство "есть правильно"? Только потому что "кто-то так сказал/написал?"
Про кого вы все время говорите? Кто сказал/написал? Скажите имя этого вашего врага. Улыбающийся
Я пишу на C++ с 91 года, у меня практически нет авторитетов в этом вопросе. Хотя я не считаю себя гуру c++.

Я замечал что именно вещи "принимаемые без доказательств" ведут к самым тяжелым ошибкам и переделкам.
Точно. Вот вы и не можете мне привести этих доказательств. Хотя пытаетесь учить: "Члену нет". Улыбающийся Хотя никаких причин нет и быть не может.

А вот как сохранять указатели/ссылки на объекты если сам сериализуемый объект их не создает и не удаляет?
Чуть позже напишу.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #98 : Февраль 08, 2013, 20:56 »

Точно. Вот вы и не можете мне привести этих доказательств. Хотя пытаетесь учить: "Члену нет". Улыбающийся
Неправда, я таким жестокостям с членом не учил! Улыбающийся . Ваше утверждение "голый указатель = плохо" имеет никак не больше доводов. Если QDataStream использует порочный (на Ваш взгляд) подход, то где же те грабли на которые (якобы) все должны наступать? Почему я о них никогда не слышал?

Я исходил из простых соображений. Если archive - обертка, то чего ради он должен брать на себя конструктор/деструктор базового stream? Почему я не могу зарядить просто базовый, а должен объявлять archive? Что если я захочу записать в тот же файл что-то вне рамок сериализации (напр TOC) ?


Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #99 : Февраль 08, 2013, 21:12 »

Неправда, я таким жестокостям с членом не учил! Улыбающийся .
Оно для вас было сомнительно и поэтому вы заменили его указателем.

Ваше утверждение "голый указатель = плохо" имеет никак не больше доводов.
Про голые указатели вы никогда не слышали? Выходите скорее из пещеры. Только ленивый не говорит про то, что сейчас можно и нужно писать программы без голых указателей, что бы исключить утечки ресурсов в программе. Уже давно придумали "умные указатели", которые сильно облегчают жизнь при написании больших систем.

Если QDataStream использует порочный (на Ваш взгляд) подход, то где же те грабли на которые (якобы) все должны наступать?
Потому что в С++ есть ссылки, которые для этого подходят куда лучше.

Я исходил из простых соображений. Если archive - обертка, то чего ради он должен брать на себя конструктор/деструктор базового stream?
Почему обертка, это полноценный класс? Поток это поток, архив это архив. Не надо их сравнивать.
Записан
Bepec
Гость
« Ответ #100 : Февраль 08, 2013, 21:34 »

Не соглашусь по умным указателям.

Умные это конечно хорошо, облегчает жизнь и прочая. Но голые они как то и быстрее и лучше и ничего плохого они не сделают (найти где у голого утекает память проще пареной репы.).

Другой вопрос, что это зависит от требований. Пять тысяч голых и пять тысяч умных это ООООЧЕЕНЬ большая разница. Удобная, хорошая, но разница.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #101 : Февраль 08, 2013, 21:35 »

Другой вопрос, что это зависит от требований. Пять тысяч голых и пять тысяч умных это ООООЧЕЕНЬ большая разница. Удобная, хорошая, но разница.
Ох уж эти мифы и легенды... Подмигивающий
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #102 : Февраль 08, 2013, 21:39 »

А вот как сохранять указатели/ссылки на объекты если сам сериализуемый объект их не создает и не удаляет?
Необходимо ввести уникальные идентификаторы объектов.
При сохранении, вместо указателя сохранять его идентификатор, а при чтении получать по идентификатору указатель на объект.
Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #103 : Февраль 08, 2013, 21:50 »

При сохранении, вместо указателя сохранять его идентификатор, а при чтении получать по идентификатору указатель на объект.
А насколько плохо в качестве такого идентификатора использовать текущий адрес объекта в памяти? (Допустим, что памяти хватает и все нужные объекты там уже находятся).
Записан

Пока сам не сделаешь...
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #104 : Февраль 08, 2013, 21:56 »

А насколько плохо в качестве такого идентификатора использовать текущий адрес объекта в памяти? (Допустим, что памяти хватает и все нужные объекты там уже находятся).
Есть простой но ужасный довод что это не катит (4 латинских буквы)
Записан
Страниц: 1 ... 5 6 [7] 8   Вверх
  Печать  
 
Перейти в:  


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