Рассмотрим следующий класс шаблонов
class MyClassInterface {
public:
  virtual double foo(double) = 0;
}
class MyClass<int P1, int P2, int P3>
: public MyClassInterface {
public:
  double foo(double a) {
    // complex computation dependent on P1, P2, P3
  }
  // more methods and fields (dependent on P1, P2, P3)
}
Параметры шаблона P1, P2, P3 находятся в ограниченном диапазоне, например, от 0 до некоторого фиксированного значения n, зафиксированного во время компиляции.
Теперь я хотел бы создать метод "factory", например
MyClassInterface* Factor(int p1, int p2, int p3) {
  return new MyClass<p1,p2,p3>(); // <- how to do this?
}
Вопрос заключается в том, как достичь построения класса шаблона, когда параметры шаблона известны только во время выполнения. И возможно ли это с параметрами шаблона, имеющими очень большой домен (например, двойной)? Пожалуйста, учтите также, что возможное решение можно расширить для использования большего количества параметров шаблона.