クラス テンプレートを考慮すると、タイプ トレイトとダミー イネーブラー テンプレート パラメーターを使用して、特定のタイプのグループにテンプレートの特殊化を提供できます。私はすでにそれを以前に尋ねました。
ここで、関数テンプレートにも同じことが必要です。つまり、テンプレート関数があり、型のグループ (たとえば、 class のサブタイプであるすべての型) の特殊化が必要ですX
。これは、次のような型特性で表現できます。
std::enable_if<std::is_base_of<X, T>::value>::type
私はこのようにすることを考えました:
template <typename T, typename ENABLE = void>
void foo(){
//Do something
}
template <typename T>
void foo<T,std::enable_if<std::is_base_of<A, T>::value>::type>(){
//Do something different
}
ただし、関数テンプレートでは部分的な特殊化が許可されていないため、これは機能しません。では、どうすればよいのでしょうか?たぶん、型特性を型として持つデフォルトのパラメーターですか?しかし、コードはどのように見えますか?