Инициализация указателя статической функции-члена - PullRequest
2 голосов
/ 09 марта 2012
template<class K> 
class Cltest
{
public:
    static double (K::*fn)(double);
};

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

Как я могу инициализировать указатель статической функции-члена?

Ответы [ 2 ]

4 голосов
/ 09 марта 2012

Если вы упростите синтаксис с помощью соответствующего typedef, то гораздо проще это сделать:

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;

Используя typedef, вы фактически отделяете type функции от имя переменной .Теперь вы можете видеть их отдельно, что облегчает понимание кода.Например, выше Cltest<K>::Fn - это тип , а Cltest<K>::fn - это переменная этого типа.

4 голосов
/ 09 марта 2012

Вам необходимо заключить *fn в фигурные скобки.
Исправлен синтаксис:

template<class K> 
double (K::*Cltest<K>::fn)(double) = 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...