Название: Десериализация UI Отправлено: Igors от Декабрь 23, 2020, 08:29 Добрый день
Очень старый код который однако поддерживать обязан. Базовый класс (псевдокод) Код Ну и плюс фабрика (с темплейтпми) и макруха регистрации в ней. Работает так: читается имя из потока, по нему фабрика делает new нужного типа и зовется виртуальный Read, который зовет конкретный Init Однако дефаулт конструктор оказался очень неудобным (при переводе на Qt) , и я решил вместо Init иметь нормальные конструкторы во всех классах наследниках (десятка 2). Конечно развалилась хвабрика чтения. Нужно ли ее "домучивать"? Или лучше сбацать в духе "современного С++", там function, bind и все такое? Тогда как? Спасибо Название: Re: Десериализация UI Отправлено: ssoft от Декабрь 23, 2020, 10:17 Однако дефаулт конструктор оказался очень неудобным (при переводе на Qt) , и я решил вместо Init иметь нормальные конструкторы во всех классах наследниках (десятка 2). Конечно развалилась хвабрика чтения. Нужно ли ее "домучивать"? Или лучше сбацать в духе "современного С++", там function, bind и все такое? Тогда как? Почему фабрика развалилась? В фабрике нельзя просто заменить make() на make( QWidget * parent, Qt::WindowFlags ) или что там используется? Можно вообще сделать отдельно Qt Widgets и оставить эту сериализацию. Код
Код
Название: Re: Десериализация UI Отправлено: Igors от Декабрь 23, 2020, 11:19 Почему фабрика развалилась? Можно, просто интересно "попробывать" новое :)В фабрике нельзя просто заменить make() на make( QWidget * parent, Qt::WindowFlags ) или что там используется? Конкретный контрол выглядит так Код Или так Код
Пока наметил так Код И покидать эти статики в мапу. Но может как-то по другому (в свете новых фич языка и.т.п.) ? Название: Re: Десериализация UI Отправлено: Igors от Декабрь 25, 2020, 08:50 Пока наметил так Так не катит :) Собсно десериализация - это "тривиально" (здесь это слово подходит). Сначала создаем объект конструктором и потом читаем из потока, объект всегда валиден. Но в данном случае я не могу безболезненно создать объект (см примеры классов выше). Сделал такКод Для всех 25 контролов. Правда здесь окно имеется. Интересно а что если бы его не было? Тогда не вижу хорошего решения Название: Re: Десериализация UI Отправлено: ssoft от Декабрь 25, 2020, 13:43 Так не катит :) Собсно десериализация - это "тривиально" (здесь это слово подходит). Сначала создаем объект конструктором и потом читаем из потока, объект всегда валиден. Но в данном случае я не могу безболезненно создать объект (см примеры классов выше). Сделал так Поэтому я и предложил отделить сериализацию от объекта. Фабрика может создавать не сам Control, а ControlSerializator, который в свою очередь вычитывает из stream необходимые параметры и, если все ОК, создает Control. |