类模板中的静态函数指针成员

时间:2010-08-09 20:55:17

标签: c++ templates function-pointers

如何在类模板中使用静态函数指针成员?

我在Visual Studio中使用C ++,我的代码与以下内容类似:

template<typename T>
class ClassTemplate
{
public:
    static T* CallIt() { return ClassTemplate<T>::mFunctionPointer(); }

private:
    static T* (*mFunctionPointer)();
};

当我编译时,我得到一个“未解析的外部符号”错误。我想我应该在课堂宣言之外做这样的事情:

template<typename T>
T* (ClassTemplate<T>::*mFunctionPointer)() = NULL;

不幸的是,我得到C2998,“不能是模板定义”。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

更改*的位置,使其成为

template<typename T>
T* (*ClassTemplate<T>::mFunctionPointer)() = NULL;

否则,您正尝试将名称空间级变量mFunctionPointer定义为类ClassTemplate的指针成员。

答案 1 :(得分:1)

将您的定义转换为:

template<typename T>
T* (*ClassTemplate<T>::mFunctionPointer)() = NULL;

*应出现在标识符之前(包括类范围解析)。