Предположим, у меня есть шаблон базового класса, например
template <typename T1, typename T2>
struct BaseFoo {
virtual int do_thing(T1 t1, T2 t2) = 0;
};
И несколько производных классов, которые имеют разные типы для параметров шаблона, например,
struct ThisFoo : public BaseFoo<int, float> {
int do_thing(int i, float f) override;
};
struct ThatFoo : public BaseFoo<double, bool> {
int do_thing(double d, bool b) override;
};
Могу ли я создать фабрика, которая позволила бы мне создать экземпляр одного из производных классов из строки во время выполнения, например
std::string foo_type = "ThatFoo"; // perhaps from a config file
auto that_foo = Factory::create("ThatFoo");
Очевидно, что традиционная фабрика не работает, потому что каждый производный класс имеет базовый класс с другим типом.