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