反しをクラステンプレートの有効な
template<typename T>
void A<T, true>::f()
{
std::cout << "true" << std::endl;
}
が部分的にそのクラスのテンプレートの特定の引数のクラステンプレートのメンバーを専門にされないように、:何しようとすることは有効ではありません
template<>
void A<int, true>::f()
{
std::cout << "true" << std::endl;
}
しかし、あなたは、すべてのテンプレート引数を提供する必要があります「<T, true>
のAの部分特殊化のメンバー関数 'f'を定義する」を意味します。そのような部分的な特殊化がないので、コンパイラはエラーになります。あなたはすべての引数を提供できない場合
template <class T, bool flag>
class A
{
template<typename, bool> struct params { };
void f()
{
f(params<T, flags>());
}
template<typename U>
void f(params<U, true>) {
std::cout << "true" << std::endl;
}
template<typename U, bool flag1>
void f(params<U, flag1>) {
std::cout << "dunno" << std::endl;
}
};
を次のように
、あなたは
f
をオーバーロードすることができ、あなたのコンパイラは、テンプレートの部分特殊化を許可していますか? – QuentinUK