我有以下代码片段,但它不起作用。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;