我有类似的情况:
template<class A, class B>
class MyClass<A, B>
{
...
static A RARELY_USED_A;
}
// Seems to work but does not cover all possible cases, since
// there may be instances of A that have no numeric limits.
template<class A, class B>
A MyClass<A, B>::RARELY_USED_A= std::numeric_limits<A>::max();
据我所见,这似乎有效。但是,在某些情况下,字符串可以用作 A ,所以我想我只需为这种特殊情况创建一个专业化。
// Does not complile
template<class B>
string MyClass<string, B>::RARELY_USED_A= "";
不幸的是,这不符合错误消息:
error: template definition of non-template 'std::string MyClass<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, B>::RARELY_USED_A'
请注意,另一方面,完整的专业化似乎可以工作(在运行时未经测试但可以编译)
// This complies but is not gernic enough and hence useless to me
template<>
string MyClass<string, string>::RARELY_USED_A= "";
我想,我一定做错了什么。如果您能指出它到底是什么,我将不胜感激。我认为特定专业应该以这种方式工作。
提前非常感谢。
e:将 DEFAULT_A 的名称编辑为 RARELY_USED_A,因为我认为“默认”在某种程度上具有误导性