次のコードスニペットがありますが、機能しません。dataMapメンバーには、T&とTを使用して適切なタイミングでコールバックに渡すコールバック関数が含まれている必要があります。テンプレートメンバーの初期化は、次の場合に失敗します(g ++ 4.7.2の場合)error: need ‘typename’ before ‘MyClass<T>::DataMap’ because ‘MyClass<T>’ is a dependent scope
。typenameを表示されている場所に貼り付けようとしましたが、別のエラーが発生しましたerror: expected primary-expression before ‘;’ token
。この方法でそれを行うことは可能ですか、それとも初期化からtypedefを削除する必要がありますか?私はその道を進んでみましたが、すぐに判読できなくなり、さらに多くのエラーが発生しました。
template <typename T> class MyClass
{
public:
typedef void(*CallbackType)(T&);
typedef std::unordered_map<int, std::pair<T, CallbackType>/**/> DataMap;
static DataMap dataMap;
...
};
template <typename T> MyClass<T>::DataMap MyClass<T>::dataMap = MyClass<T>::DataMap;