我有一堆类有一个静态成员,它是一个枚举值。我在其他地方有一张地图,以这个枚举为键。现在,如果我在函数中使用模板参数来访问地图,我会得到一个未定义的引用。
为了清楚起见,这是一个简化的非工作示例:
template<int T>
struct A
{
static const int Type = T;
}
template<class T>
void fun()
{
cout << map_[T::Type] << endl;
}
map<int, string> map_{{1337, "1337"}};
主要的 :
fun<A<1337>();
给了我(g++ 4.7):
undefined reference to `(anonymous namespace)::A<1337>::Type'
然而这:
template<class T>
void fun()
{
auto key = T::Type;
cout << map_[key] << endl;
}
编译和打印1337
有人可以向我解释这种行为吗?