Inicialización de puntero de función de miembro estático con plantilla

template<class K> 
class Cltest
{
public:
    static double (K::*fn)(double);
};

template<class K> 
double K::*Cltest<K>::fn(double) = NULL;

How can I initialize the static member function pointer?

preguntado el 09 de marzo de 12 a las 14:03

I am not sure, but can't you do it just like you initialized it to 0? -

2 Respuestas

Necesitas adjuntar *fn in braces.
Sintaxis corregida:

template<class K> 
double (K::*Cltest<K>::fn)(double) = 0;

respondido 09 mar '12, 14:03

As always, I am 5 seconds late ;) - Bartek Banachewicz

If you simplify the syntax using appropriate typedef, then it is much easier to do that:

template<class K> 
class Cltest
{
public:
    typedef double (K::*Fn)(double); //use typedef
    static Fn fn;
};

template<class K> 
typename Cltest<K>::Fn Cltest<K>::fn = 0;

//Or you can initialize like this:
template<class K> 
typename Cltest<K>::Fn Cltest<K>::fn = &K::SomeFun;

Usar typedef, you actually separate the tipo of the function from the variable name. Now you can see at them separately which makes it easier to understand the code. For example, above Cltest<K>::Fn es la tipo y Cltest<K>::fn es la variable de ese tipo.

respondido 09 mar '12, 14:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.