部分的な特殊化のために静的変数を初期化するにはどうすればよいですか?
template <bool A=true, bool B=false>
struct from {
const static std::string value;
};
// no specialization - works
template <bool A, bool B>
const std::string from<A, B>::value = "";
// partial specialization - does not compile -
// Error: template argument list following class template name must list parameters in the order used in template parameter list
// Error: from<A,B>' : too few template arguments
template <bool B>
const std::string from<true, B>::value = "";
// full specialization - works
const std::string from<false, true>::value = "";
部分的に機能しないのはなぜですか?
EDIT:テンプレートクラスの静的データメンバーの初期化のための部分的なテンプレートの特殊化に基づく解決策を見つけました
静的変数を初期化する前に、部分的な特殊化の宣言を繰り返す必要があります。
template <bool B>
struct from<true, B> {
const static std::string value;
};
繰り返しますが、質問はなぜですか?