テンプレートの特殊化方法を使用して、float/double SSE-intrinsics を切り替えます。
template<typename Precision>
struct simd
{
typedef Precision simd_vector;
};
template<>
struct simd<float>
{
typedef __m128 simd_vector;
};
template<>
struct simd<double>
{
typedef __m128d simd_vector;
};
int main()
{
simd<float>::simd_vector float_vector;//__m128
simd<double>::simd_vector double_vector;//__m128d
}
うまくいきますが、SSE-intrinsics 関数を同じように使用する方法がわかりませんか? スイッチ加算操作が必要であると仮定します: float の場合は _mm_add_ps 組み込み、double の場合は _mm_add_pd です。テンプレートの特殊化トリックを使用するにはどうすればよいですか?