mrs*_*mrs 15 c++ static templates instantiation member
#include <map>
#include <iostream>
template <typename T>
class A
{
static std::map<int, int> data;
public:
A()
{
std::cout << data.size() << std::endl;
data[3] = 4;
}
};
template <typename T>
std::map<int, int> A<T>::data;
//std::map<int, int> A<char>::data;
A<char> a;
int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这有什么问题?如果没有明确的实例化,它就会破坏
data[3] = 4;显式实例化解决了问题但程序在之后中断
std::cout << data.size() << std::endl;什么意思是静态类模板memeber
data被实例化.
我手边没有 Visual C++,但我可以看到使用 GCC 编译的代码也存在同样的问题。您需要初始化数据成员:
template<> std::map<int, int> A<char>::data = std::map<int, int>();
Run Code Online (Sandbox Code Playgroud)
通过此更改,它可以正确编译并运行(对于我来说,在 Linux 上的 GCC 上)。
| 归档时间: |
|
| 查看次数: |
8671 次 |
| 最近记录: |