Если вы упростите синтаксис с помощью соответствующего 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
- это переменная этого типа.