【发布时间】:2012-03-09 01:10:44
【问题描述】:
所以我有一个用于模板定义的简单结构。
template<class T>
struct EventListener
{
typedef Functor<T, void, Event*> functor;
typedef void (T::*FunctionPtr)(Event* evt);
};
在一个类中我有一个函数
template<class T>
void addEventListener(const string &eventName, T* target, EventListener<T>::FunctionPtr function);
当我尝试构建它时(VS2010、Windows 7、x64)
我收到以下错误:
Error C2061: syntax error : identifier 'FunctionPtr'
我觉得这应该是有效的。
如果我将函数声明中的 T 替换为特定的类...
template<class T>
void addEventListener(const string &eventName, T* target, EventListener<Foobar>::FunctionPtr function);
...代码编译。
如果我将 typedef 替换为实际类型...
template<class T>
void addEventListener(const string &eventName, T* target, void(T::*function)(Event* evt));
...它也可以编译。
那么我在这里错过了什么?我很确定后一个示例将适合我的目的,但我宁愿将其保留在 typedef 中。
【问题讨论】:
标签: c++ templates function-pointers