模板化静态成员函数指针初始化

时间:2012-03-09 14:20:02

标签: c++ templates initialization

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

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

如何初始化静态成员函数指针?

2 个答案:

答案 0 :(得分:4)

您需要将*fn括在大括号中 更正语法:

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

答案 1 :(得分:4)

如果使用适当的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,您实际上将该函数的类型变量名称分开。现在,您可以单独看到它们,这样可以更容易理解代码。例如,上面Cltest<K>::Fn类型Cltest<K>::fn是该类型的变量