¿Existe una manera directa de definir una especialización parcial de una clase de plantilla C++ dada una constante numérica para uno de los parámetros de la plantilla? Estoy intentando crear constructores especiales para sólo ciertos tipos de combinaciones de plantilla:Especialización en plantillas C++ con valor constante
template <typename A, size_t B> class Example
{
public:
Example() { };
A value[B];
};
template <typename A, 2> class Example
{
public:
Example(b1, b2) { value[0] = b1; value[1] = b2; };
};
Este ejemplo no se compilará y devolverá un error Expected identifier before numeric constant
en la segunda definición.
He echado un vistazo a través de una serie de ejemplos aquí y en otros lugares, pero la mayoría parece girar en torno a la especialización con un tipo y no con una constante.
Editar:
Buscando una manera de escribir un constructor utilizado de forma condicional, algo funcionalmente como esto:
template <typename A, size_t B> class Example
{
public:
// Default constructor
Example() { };
// Specialized constructor for two values
Example<A,2>(A b1, A b2) { value[0] = b1; value[1] = b2; };
A foo() {
A r;
for (size_t i = 0; i < b; ++b)
r += value[i];
return r;
}
// Hypothetical specialized implementation
A foo<A, 2>() {
return value[0] + value[1];
}
A value[B];
};
Chceck my answer. Parece hacer exactamente lo que quieres. –