私はこれに似た状況にあります:
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に編集しました