2 つの値を取り、それらに対して何らかの計算を行い、同じ型の値を返すテンプレート化された数学関数があります。
template <typename T>
T math_function(T a, T b) {
LongT x = MATH_OP1(a,b);
return MATH_OP2(x,a);
}
基本的に T の長いバージョン (上記では LongT と呼ばれます) である型に中間値 (x 内) を格納したいと考えています。したがって、T が float の場合、x を double にする必要があります。T が int の場合、x を long int にする必要があります。
これを達成する方法はありますか?を試してみenable_if
ましたが、本当に必要なようenable_if_else
です。
LongT に何を使用するかをコンパイラに独自に判断してもらいたいと思います。関数を呼び出すときに指定する必要はありません。