我有一个模板类和它的一个静态成员,它是 map 类型的。
我似乎无法弄清楚如何使用该成员。我尝试了几种不同的变体,但这是开始的地方。
我在函数 size() 的定义中遇到错误:
undefined reference to `A<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >::my_map_'
#include <iostream>
#include <map>
#include <string>
using namespace std;
typedef map<string, int> si_map_t;
template<class T>
class A {
public:
static map<T, int> my_map_;
static void add(T key, int value) {
my_map_.insert(std::pair<T, int>(key, value));
}
static size_t size() {
return my_map_.size();
}
};
template<>
si_map_t A<string>::my_map_;
int main() {
A<string>::my_map_;
size_t count = A<string>::size();
cout << count << endl;
return 0;
}
最佳答案
如果您真的想要使用类模板成员的显式特化,请注意这样的表示法
template <>
si_map_t A<string>::my_map_;
仅表示特化的声明。这很奇怪,但这是真的。
使用以下语法定义成员特化:
template <>
si_map_t A<string>::my_map_ = si_map_t();
或以下 C++11 语法:
template <>
si_map_t A<string>::my_map_ = {};
或
template <>
si_map_t A<string>::my_map_{};
关于c++ - 模板类中的静态成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22588528/