У меня есть ситуация, подобная этой:
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, потому что я думал, что «default» каким-то образом вводит в заблуждение