我目前有一个模板,可以进行一些计算,但是当前存在一个乘法运算。
输入可以是有符号整数,无符号整数或浮点数。我想做的就是根据模板参数T将模板参数转换为相应的最大可用类型(即int64_t,uint64_t,double)。
template<typename T>
T scale(T value, T position, T count)
{
return (value * position) / count;
}
当T
为int16_t
并有如下呼叫时:
int16_t result(scale(15'000, 3'000, 5'000));
返回无效数字,因为乘法(15'000 * 3'000)大于T
可以容纳的数字。
我希望能够做这样的事情:
return (static_cast<largest<T>::type>(value)
* static_cast<largest<T>::tyoe>(position))
/ static_cast<largest<T>::type>(count);
其中largest<T>::type
返回相同符号的最大可用类型(整数)或double
(浮点数)。