#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;
}