Dada una plantillaplantilla especializan en base a la positividad del argumento
template <int n>
void f(){...};
Sé que puedo especializar que para valores específicos de n
haciendo:
template <>
void f<2>(){...};
Pero, ¿existe un método que me permite para especializarlo en positivo n
?
se me ocurrió hacer lo siguiente
template <int n>
void f<n>(){
int dummy[n]; //invalid for n < 0
...
};
Así que para n<0
este código es válido y el compilador podría recurrir a la definición anterior. Lamentablemente, todo lo que obtengo es un error redefinition of 'void f<n>()'
.
Nota: Supongo que probablemente no sea compatible con la norma. Estoy preguntando si no hay algún método (tal vez alguna metaprogramación de plantillas) para lograr este efecto.
Materia de estilo, pero prefiero poner 'enable_if' en el tipo de devolución para que no haya un parámetro mágico que cuelgue confundiendo cosas (usuarios y el tipo de función). – GManNickG