Создание фабрики, когда базовый класс является шаблоном класса - PullRequest
0 голосов
/ 01 августа 2020

Предположим, у меня есть шаблон базового класса, например

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");

Очевидно, что традиционная фабрика не работает, потому что каждый производный класс имеет базовый класс с другим типом.

...