Lo siento por la pregunta complicada, pero básicamente la idea es muy simple. Tengo una plantilla de clase variadic:¿Es posible definir una plantilla de clase variadica de C++ 11 cuya cardinalidad de parámetros variados dependa de un parámetro de plantilla entera?
template<class P1, class P2, class ... P3s>
class A
{
...
};
me gustaría tener un generador de A-clases que toma un parámetro de plantilla entero N y crea la instancia de una clase A con los parámetros N P3S. Al igual que:
template<class P1, class P2, class P3, int N>
class GenA : /* somehow */ : public A<P1, P2, /* N times */ P3, P3, ...>
{
...
};
Así que el uso sería:
// Generates A<Class1, Class2, Class3, Class3, Class3>
GenA<Class1, Class2, Class3, 3> a;
ya he intentado hacer eso con la recursividad tiempo de compilación y la especialización parcial
template <class P1, class P2, int N, class P3>
class GenA : public GenA<P1, P2, N-1, P3, P3>
{
...
}
template <class P1, class P2, int N, class ... P3s>
class GenA<P1, P2, 0, P3s ...> : public A<P1, P2, P3s, ...>
{
...
}
obstante C++ 11 no reconoce la segunda plantilla es una especialización de la primera (porque es, de hecho, diferente) y nunca llega al caso base de la recursión (deja de quejarse sobre demasiados niveles de recursión). ¿Algunas ideas?
Gracias
Tunnuz
Parece difícil de hacer sin excesivas especializaciones de plantillas. –
Después de haber elegido una de las respuestas, ¿podría proporcionar un punto de referencia de las soluciones? – pmr