Russian Qt Forum
Ноябрь 27, 2024, 07:13
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
С/C++
>
Сериализация (как сделать поудобнее)
Страниц:
1
...
5
6
[
7
]
8
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Сериализация (как сделать поудобнее) (Прочитано 48231 раз)
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Сериализация (как сделать поудобнее)
«
Ответ #90 :
Февраль 08, 2013, 18:34 »
Цитата: Old от Февраль 08, 2013, 18:08
А я предлагаю добавить класс:
Тут согласен, смысл есть
Записан
ViTech
Гипер активный житель
Offline
Сообщений: 858
Re: Сериализация (как сделать поудобнее)
«
Ответ #91 :
Февраль 08, 2013, 18:38 »
Цитата: Igors от Февраль 08, 2013, 18:00
Какой "каждой структуре"
Речь шла о полиморфных классах уже имеющих общую базу.
А я вот и жду, узнаем мы наконец-то, что конкретно Вы собираетесь сериализовать и куда. Началось со структур по сети, потом "vectot<int>, vectot<float>", теперь и до полиморфных классов добрались. Или Вы хотите универсальный метод для всего сразу изобрести?
Записан
Пока сам не сделаешь...
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Сериализация (как сделать поудобнее)
«
Ответ #92 :
Февраль 08, 2013, 18:42 »
Цитата: Igors от Февраль 08, 2013, 18:30
То есть если код труден для поддержки - некомпетентны поддерживающие? А почему Вы не допускаете мысли что он просто-напросто спланирован плохо, так сказать "жертва увлечения общностью"? Заметим что даже и в случае если Вы правы - возможно такого кода лучше не иметь.
Да. Вы заказываете у человека готовый код и согласовываете использование шаблонов. Человек вам делает этот код на шаблонах.
А когда вы хотите сами в нем что-то изменить оказывается, что вы в этом ничего не понимаете и сделать ничего не можете.
После этого вы обвиняете всех кроме себя. Учитесь или не заказываете такой код.
Цитата: Igors от Февраль 08, 2013, 18:30
А зачем Вы навесили уже 4 класса?
Это называется иерархия классов. В дальнейшем, при развитии проекта, они наполнятся содержимым.
Цитата: Igors от Февраль 08, 2013, 18:30
Зачем тащить QDataStream (и каждый такой stream) если мы хотим от него только операторы?
Мы хотим иметь архивы, которые позволяют сериализоваться в разные форматы (бинарный, текстовый, xml, json, ...)
Вот для примера я привел сериализацию в бинарный формат с использованием QDataStream?
Цитата: Igors от Февраль 08, 2013, 18:30
Все в 1 хедере. Чего не хватает?
Это конечно большое достижение.
Кстати, у меня тоже все было в одном хедере.
Цитата: Igors от Февраль 08, 2013, 18:30
Ну значит QDataStream дурной тон - получает в конструкторе указатель на QIODevice
Да.
Цитата: Igors от Февраль 08, 2013, 18:30
Но не член точно
Комплексы?
Конечно лучше создавать объект на куче руками, а потом героически не забывать его удалить. Это же круто.
Но это круто только в школьных проектах.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Сериализация (как сделать поудобнее)
«
Ответ #93 :
Февраль 08, 2013, 19:08 »
Цитата: Old от Февраль 08, 2013, 18:42
Учитесь или не заказываете такой код.
Ролью учителя лучше не увлекаться
Цитата: Old от Февраль 08, 2013, 18:42
Это называется иерархия классов. В дальнейшем, при развитии проекта, они наполнятся содержимым.
...
Мы хотим иметь архивы, которые позволяют сериализоваться в разные форматы (бинарный, текстовый, xml, json, ...) Вот для примера я привел сериализацию в бинарный формат с использованием QDataStream?
А какой ф-ционал Вы хотите поместить напр в qds_iarchive? Зачем нужен класс который никакой смысловой нагрузки не несет? Все делает QDataStream (или др базовый stream), archive просто обертка. Хотите разные форматы - ну и создавайте "инстансы". Почему не потемплейтить если это к месту?
Цитата: Old от Февраль 08, 2013, 18:42
Конечно лучше создавать объект на куче руками, а потом героически не забывать его удалить. Это же круто.
Но это круто только в школьных проектах.
А я и не хочу ничего удалять, могу создать этот оберточный класс где хочу и мне это ничем не грозит.
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Сериализация (как сделать поудобнее)
«
Ответ #94 :
Февраль 08, 2013, 19:18 »
Цитата: Igors от Февраль 08, 2013, 19:08
Ролью учителя лучше не увлекаться
А я никого не учу.
Перечитайте сообщение - там о другом.
Цитата: Igors от Февраль 08, 2013, 19:08
А какой ф-ционал Вы хотите поместить напр в qds_iarchive?
Все. Здесь все делает бэкэнд QDataStream, а вот если я захочу в качестве бэкэнда использовать QDomDocument для сериализации в xml, то придется добавлять.
Цитата: Igors от Февраль 08, 2013, 19:08
Почему не потемплейтить если это к месту?
Потому что потом это, возможно, придется кому-то сопровождать... Вы же сами выше жаловались.
Цитата: Igors от Февраль 08, 2013, 19:08
А я и не хочу ничего удалять, могу создать этот оберточный класс где хочу и мне это ничем не грозит.
Ага-ага, а через пол года - захотел, а еще через пол года понял что течет, а еще через пол года переделок все починил. Перелопатив пол проекта.
А если еще и участников в проекте несколько,... можно и не завершиться никогда.
И заметь те это все только из-за комплексов.
«
Последнее редактирование: Февраль 08, 2013, 19:20 от Old
»
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Сериализация (как сделать поудобнее)
«
Ответ #95 :
Февраль 08, 2013, 19:29 »
Цитата: Old от Февраль 08, 2013, 19:18
Ага-ага, а через пол года - захотел, а еще через пол года понял что течет, а еще через пол года переделок все починил. Перелопатив пол проекта.
Ну бывает и так - и это нормально, если не слишком часто. Но почему Вы решили что членство "есть правильно"? Только потому что "кто-то так сказал/написал?" Я замечал что именно вещи "принимаемые без доказательств" ведут к самым тяжелым ошибкам и переделкам.
Ну ладно, то все "цветочки". А вот как сохранять указатели/ссылки на объекты если сам сериализуемый объект их не создает и не удаляет? Что Вы об этом думаете?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Сериализация (как сделать поудобнее)
«
Ответ #96 :
Февраль 08, 2013, 19:37 »
Цитата: Old от Февраль 08, 2013, 19:18
Потому что потом это, возможно, придется кому-то сопровождать... Вы же сами выше жаловались.
Пример: посидели с друзьями, приняли пару литров для оживления беседы. Не вижу в этом ничего плохого. А вот если каждый день спозаранку пьян - разница есть? То же и здесь - открываете, а там аж кишит, все на темплейтах, живого места просто нету. Чему же это все посвящено? После неск дней "вникания" - да ничему путному, заигрался в общность, вот и все. Словом - злоупотребляют
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Сериализация (как сделать поудобнее)
«
Ответ #97 :
Февраль 08, 2013, 19:55 »
Цитата: Igors от Февраль 08, 2013, 19:29
Но почему Вы решили что членство "есть правильно"? Только потому что "кто-то так сказал/написал?"
Про кого вы все время говорите? Кто сказал/написал? Скажите имя этого вашего врага.
Я пишу на C++ с 91 года, у меня практически нет авторитетов в этом вопросе. Хотя я не считаю себя гуру c++.
Цитата: Igors от Февраль 08, 2013, 19:29
Я замечал что именно вещи "принимаемые без доказательств" ведут к самым тяжелым ошибкам и переделкам.
Точно. Вот вы и не можете мне привести этих доказательств. Хотя пытаетесь учить: "Члену нет".
Хотя никаких причин нет и быть не может.
Цитата: Igors от Февраль 08, 2013, 19:29
А вот как сохранять указатели/ссылки на объекты если сам сериализуемый объект их не создает и не удаляет?
Чуть позже напишу.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Сериализация (как сделать поудобнее)
«
Ответ #98 :
Февраль 08, 2013, 20:56 »
Цитата: Old от Февраль 08, 2013, 19:55
Точно. Вот вы и не можете мне привести этих доказательств. Хотя пытаетесь учить: "Члену нет".
Неправда, я таким жестокостям с членом не учил!
. Ваше утверждение "голый указатель = плохо" имеет никак не больше доводов. Если QDataStream использует порочный (на Ваш взгляд) подход, то где же те грабли на которые (якобы) все должны наступать? Почему я о них никогда не слышал?
Я исходил из простых соображений. Если archive - обертка, то чего ради он должен брать на себя конструктор/деструктор базового stream? Почему я не могу зарядить просто базовый, а должен объявлять archive? Что если я захочу записать в тот же файл что-то вне рамок сериализации (напр TOC) ?
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Сериализация (как сделать поудобнее)
«
Ответ #99 :
Февраль 08, 2013, 21:12 »
Цитата: Igors от Февраль 08, 2013, 20:56
Неправда, я таким жестокостям с членом не учил!
.
Оно для вас было сомнительно и поэтому вы заменили его указателем.
Цитата: Igors от Февраль 08, 2013, 20:56
Ваше утверждение "голый указатель = плохо" имеет никак не больше доводов.
Про голые указатели вы никогда не слышали? Выходите скорее из пещеры. Только ленивый не говорит про то, что сейчас можно и нужно писать программы без голых указателей, что бы исключить утечки ресурсов в программе. Уже давно придумали "умные указатели", которые сильно облегчают жизнь при написании больших систем.
Цитата: Igors от Февраль 08, 2013, 20:56
Если QDataStream использует порочный (на Ваш взгляд) подход, то где же те грабли на которые (якобы) все должны наступать?
Потому что в С++ есть ссылки, которые для этого подходят куда лучше.
Цитата: Igors от Февраль 08, 2013, 20:56
Я исходил из простых соображений. Если archive - обертка, то чего ради он должен брать на себя конструктор/деструктор базового stream?
Почему обертка, это полноценный класс? Поток это поток, архив это архив. Не надо их сравнивать.
Записан
Bepec
Гость
Re: Сериализация (как сделать поудобнее)
«
Ответ #100 :
Февраль 08, 2013, 21:34 »
Не соглашусь по умным указателям.
Умные это конечно хорошо, облегчает жизнь и прочая. Но голые они как то и быстрее и лучше и ничего плохого они не сделают (найти где у голого утекает память проще пареной репы.).
Другой вопрос, что это зависит от требований. Пять тысяч голых и пять тысяч умных это ООООЧЕЕНЬ большая разница. Удобная, хорошая, но разница.
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Сериализация (как сделать поудобнее)
«
Ответ #101 :
Февраль 08, 2013, 21:35 »
Цитата: Bepec от Февраль 08, 2013, 21:34
Другой вопрос, что это зависит от требований. Пять тысяч голых и пять тысяч умных это ООООЧЕЕНЬ большая разница. Удобная, хорошая, но разница.
Ох уж эти мифы и легенды...
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Сериализация (как сделать поудобнее)
«
Ответ #102 :
Февраль 08, 2013, 21:39 »
Цитата: Igors от Февраль 08, 2013, 19:29
А вот как сохранять указатели/ссылки на объекты если сам сериализуемый объект их не создает и не удаляет?
Необходимо ввести уникальные идентификаторы объектов.
При сохранении, вместо указателя сохранять его идентификатор, а при чтении получать по идентификатору указатель на объект.
Записан
ViTech
Гипер активный житель
Offline
Сообщений: 858
Re: Сериализация (как сделать поудобнее)
«
Ответ #103 :
Февраль 08, 2013, 21:50 »
Цитата: Old от Февраль 08, 2013, 21:39
При сохранении, вместо указателя сохранять его идентификатор, а при чтении получать по идентификатору указатель на объект.
А насколько плохо в качестве такого идентификатора использовать текущий адрес объекта в памяти? (Допустим, что памяти хватает и все нужные объекты там уже находятся).
Записан
Пока сам не сделаешь...
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Сериализация (как сделать поудобнее)
«
Ответ #104 :
Февраль 08, 2013, 21:56 »
Цитата: ViTech от Февраль 08, 2013, 21:50
А насколько плохо в качестве такого идентификатора использовать текущий адрес объекта в памяти? (Допустим, что памяти хватает и все нужные объекты там уже находятся).
Есть простой но ужасный довод что это не катит (4 латинских буквы)
Записан
Страниц:
1
...
5
6
[
7
]
8
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...