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 {};
¿Fue útil?

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
scroll top