2
所以我有一个简单的结构用于模板定义。模板成员函数中的模板化参数类型
template<class T>
struct EventListener
{
typedef Functor<T, void, Event*> functor;
typedef void (T::*FunctionPtr)(Event* evt);
};
,并在I类有一个函数
template<class T>
void addEventListener(const string &eventName, T* target, EventListener<T>::FunctionPtr function);
当我尝试建立这个(VS2010,Windows 7中,64位)
我收到以下错误:
Error C2061: syntax error : identifier 'FunctionPtr'
我觉得这应该是有效的。
如果我有一类特殊替换吨函数声明...
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中。
耻辱的错误消息并不能解释这一点。 – 2012-03-09 01:18:36
啊,工作完美。非常感谢。 – 2012-03-09 01:18:36
+1,因为解析器不能说出部分,所以标准命令“FunctionPtr”被解释为成员而不是嵌套类型。 – 2012-03-09 01:19:49