kwi*_*ver 3 c++ templates static-members
我有以下代码片段,但它不起作用.dataMap成员应该包含一个回调函数,该函数在适当的时候将T&和T传递给回调函数.该模板构件初始化失败(用克++ 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;
Run Code Online (Sandbox Code Playgroud)
编译器正确地建议您可能要包含typename关键字,因为它DataMap是一个合格的依赖名称MyClass<T>::DataMap.静态成员定义应如下所示:
template <typename T>
typename MyClass<T>::DataMap MyClass<T>::dataMap;
Run Code Online (Sandbox Code Playgroud)
该成员将默认构造,因此无需复制 - 初始化它.因此,省略该= MyClass<T>::DataMap部分就足够了(因为你DataMap在复制初始化的右侧忘记了括号后会给你带来麻烦):
// This is also valid (mind the parentheses to invoke the
// constructor of `DataMap`), but unnecessary.
template <typename T>
typename MyClass<T>::DataMap MyClass<T>::dataMap = MyClass<T>::DataMap();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
596 次 |
| 最近记录: |