-Поиск по дневнику

Поиск сообщений в rss_forum_sources_ru

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 29.07.2007
Записей:
Комментариев:
Написано: 80


двухшаговая инициализация

Понедельник, 03 Августа 2020 г. 07:40 + в цитатник
JoeUser: Twilight, посмотри такой вариант, может понравится:

    #include
    struct BaseData {
    virtual std::string getValue() = 0;
    };
    struct ObjectData1: public BaseData {
    std::string str;
    ObjectData1(std::string iStr):str(iStr){}
    std::string getValue() override {
    return str;
    };
    };
    struct ObjectData2: public BaseData {
    int Int;
    ObjectData2(int iInt):Int(iInt){}
    std::string getValue() override {
    return std::to_string(Int);
    };
    };
    template
    class Factory {
    public:
    static T* generate(BaseData *objectData) {
    T* Tmp = new T();
    Tmp->init(objectData);
    return Tmp;
    }
    };
    class Initializer: public Factory {
    BaseData *objectData;
    public:
    void init(BaseData *iObjectData) {
    objectData = iObjectData;
    std::cout << objectData->getValue() << ": " << typeid(*objectData).name() << "\n";
    }
    };
    int main() {
    auto *Data1 = new ObjectData1("String");
    auto *Data2 = new ObjectData2(10);
    auto *I1 = Factory::generate(Data1);
    auto *I2 = Factory::generate(Data2);
    return 0;
    }

https://forum.sources.ru/index.php?showtopic=419313&view=findpost&p=3835741

Метки:  

 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку