2
テンプレート定義には単純な構造体が使用されています。テンプレートメンバー型のテンプレート型のパラメータ型関数
template<class T>
struct EventListener
{
typedef Functor<T, void, Event*> functor;
typedef void (T::*FunctionPtr)(Event* evt);
};
と私がしようとすると、この(VS2010、Windows 7の、x64の)をビルドするとき、私は関数に
template<class T>
void addEventListener(const string &eventName, T* target, EventListener<T>::FunctionPtr function);
を持っているクラスの
私は次のエラーを取得する:
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に入れます。
エラーメッセージには説明がありません。 –
ああ、完璧に働いた。どうもありがとうございます。 –
+1、パーサーがパーツを伝えることができないので、標準は 'FunctionPtr'がメンバーとして解釈され、ネストされた型ではないことを要求します。 –