いくつかの整数型 (16、32、64 ビット) と浮動小数点型 (float、double、long double) に対して同様の計算を実行したいと思いますが、同一ではありません。ほとんどのコードは同じですが、int と float で異なる部分を実行する必要があります。たとえば、int の比較は a==b で実行できますが、float の比較は abs(ab) で実行する必要があります。
これを行う 1 つの方法は、int と float の間で異なるコードの部分を小さな関数に分離し、型ごとにテンプレートを特殊化することです。ただし、整数型ごとに同じコードと浮動小数点型ごとに別のコードをコピーして貼り付けることは避けたいと思います。したがって、質問: 一度に複数の型のテンプレート関数を特殊化することは可能ですか? それが合法である場合、意味的に次のようなもの:
template<>
bool isEqual< short OR long OR long long >( T a, T b ) {
return a == b;
}
template<>
bool isEqual< float OR double OR long double >( T a, T b ) {
return abs( a - b ) < epsilon;
}