Especialización parcial de C++ (punteros de función)
-
22-08-2019 - |
Pregunta
¿Alguien puede decirnos si lo siguiente es C++ legal o no?
template < typename s , s & (*fn) ( s * ) >
class c {};
// especialización parcial
template < typename s , s & (*fn) ( s * ) >
class c < s*, s* & (*fn)(s**) {};
Error de g++ (4.2.4):Una llamada de función no puede aparecer en un error de expresión constante:El argumento 2 de la plantilla no es válido.
Aunque funciona para la especialización explícita
int & func ( int * ) { return 0; }
template <> class c < int , func> class c {};
Solución
Creo que significa
template < typename s , s & (*fn) ( s * ) >
class c {};
// partial specialization
template < typename s , s & (*fn) ( s * ) >
class c < s*, fn > {};
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow