Ох, и пришло же кому-то в голову задать нам такое задание по С++: сделать иерархию графических объектов, и + уметь сохранять в файл/загружать из файла.
Я посчитал, что в лучших традициях С++ я не буду громождить очередной костыльный велосипед, а возьму готовую библиотеку. На роль этой библиотеки, кроме как serialization из буста, мало что подходило: ведь требуется автоматическая сериализация полиморфных объектов из указателей.
Всё бы хорошо, документация хорошая, за полчаса я усвоил всё, что надо... пока дело не дошло до отладки. Не знаю, у кого как, а я впервые увидел backtrace на 100+ функций, из которых ~80 - бустовские с полным названием символов на 100-300.
Кроме того, в процессе сериализации есть ещё одна засада. Если вы попытаетесь сериализировать объект, тип которого не зарегистрирован (ну бывает, забыли прописать), то будет выдан exception - "type unregistered". И хотя ни черта не понятно, какой тип не зарегистрирован, хотя бы понятно, куда копать.
Но вот если вы забудете регистрацию при десериализации, то segfault в библиотечной функции load_pointer - всё, на что вы можете рассчитывать.
Но я-таки поборол. Набор объектов из файла и обратно ходит прекрасно. Ну и фиг, что кроме этого я ничего не успел - ни отчёта, ни управления, собственно, фигурами на форме. Зато [де]сериализация пашет :)
Я посчитал, что в лучших традициях С++ я не буду громождить очередной костыльный велосипед, а возьму готовую библиотеку. На роль этой библиотеки, кроме как serialization из буста, мало что подходило: ведь требуется автоматическая сериализация полиморфных объектов из указателей.
Всё бы хорошо, документация хорошая, за полчаса я усвоил всё, что надо... пока дело не дошло до отладки. Не знаю, у кого как, а я впервые увидел backtrace на 100+ функций, из которых ~80 - бустовские с полным названием символов на 100-300.
Кроме того, в процессе сериализации есть ещё одна засада. Если вы попытаетесь сериализировать объект, тип которого не зарегистрирован (ну бывает, забыли прописать), то будет выдан exception - "type unregistered". И хотя ни черта не понятно, какой тип не зарегистрирован, хотя бы понятно, куда копать.
Но вот если вы забудете регистрацию при десериализации, то segfault в библиотечной функции load_pointer - всё, на что вы можете рассчитывать.
Но я-таки поборол. Набор объектов из файла и обратно ходит прекрасно. Ну и фиг, что кроме этого я ничего не успел - ни отчёта, ни управления, собственно, фигурами на форме. Зато [де]сериализация пашет :)
- Location:дома
Вот он. Доотлаженный. И первый опыт по написанию этих самых реальных менеджеров памяти на С++-ах.
Ровно целый день, с утра до вечера я с ним провозился.
Ну и что, что он работает в несколько раз медленнее штатного менедежера памяти. Ну и что, что выделенную память отдает не очень хорошо. Зато работает...
Ровно целый день, с утра до вечера я с ним провозился.
Ну и что, что он работает в несколько раз медленнее штатного менедежера памяти. Ну и что, что выделенную память отдает не очень хорошо. Зато работает...
- Location:дома
- Music:Megadeth - Set The World Afire
4.3.0!
Наконец-то разрешились мои давние зависимости со старыми locales (спасибо aptitude), и смог-таки себе поставить libqt4-dev - пакет для разработки под QT4. В очередной раз поставилось всё идеально. Ну и плюс - опять-таки разработчикам и майнтейнерам респект за пакет qt4-doc. Весит, конечно, 20 метров с лишним, зато я уже оценил его продуманность и полезность. Хотя я сейчас только начал проходить туториал, но уже много чего умею :)
Вот один из тестовых примеров + выполненное дополнительное задание:

И всё под чистым Линухом, всё свободно :) собирается методом
qmake -project; qmake; (первый раз)
make; (пересборка)
Очень надеюсь, что это наконец положит край моей работе с Borland C++ Builder.
Наконец-то разрешились мои давние зависимости со старыми locales (спасибо aptitude), и смог-таки себе поставить libqt4-dev - пакет для разработки под QT4. В очередной раз поставилось всё идеально. Ну и плюс - опять-таки разработчикам и майнтейнерам респект за пакет qt4-doc. Весит, конечно, 20 метров с лишним, зато я уже оценил его продуманность и полезность. Хотя я сейчас только начал проходить туториал, но уже много чего умею :)
Вот один из тестовых примеров + выполненное дополнительное задание:
И всё под чистым Линухом, всё свободно :) собирается методом
qmake -project; qmake; (первый раз)
make; (пересборка)
Очень надеюсь, что это наконец положит край моей работе с Borland C++ Builder.
- Location:дома
- Mood:energetic
- Music:Nigthwish - Wishmaster
