К сожалению, это невозможно. Параметры шаблона должны быть известны во время компиляции
Когда компилятор встречает этот вызов функции шаблона, он использует шаблон для автоматической генерации функции, заменяющей каждое появление myType типом, переданным как фактический параметр шаблона (в данном случае int), а затем вызывает его. Этот процесс автоматически выполняется компилятором и невидим для программиста.
source
То есть все значения, с которыми может использоваться шаблон, должны быть известно во время компиляции.
Что вы можете сделать, это следующее
MyClassInterface* Factor(int p1, int p2, int p3) {
if (p1 == 0 && p2 == 0 && p3 == 0)
return new MyClass<0,0,0>();
if (p1 == 0 && p2 == 0 && p3 == 1)
return new MyClass<0,0,1>();
etc;
}
Но так как вы хотите произвольное число N
, я предполагаю, что это не решение, которое возможно для вас. Вы можете попытаться добавить макрос препроцессора, чтобы сгенерировать функцию для произвольных значений N
, но, честно говоря, я бы этого не сделал. Это сделает ваши исполняемые файлы очень большими и увеличит время компиляции.
Возможно, вы найдете решение, похожее на то, что вы пытаетесь сделать с списками инициализаторов, Это позволило бы вам сделать что-то вроде
my_type Var = {1, 2, 3, 4, 5, 6, ..., N};
Вы можете использовать такой список в качестве параметра функции.
Надеюсь, что это помогло вам с тем, чего вы пытаетесь достичь!