我如何使用比率而不是浮点数?
How do I use ratio Instead of a float?
所以我知道我不能使用 float
作为模板参数:
template<float T>
float foo(const float param) { return param + T; }
听说可以用ratio
代替。我想做这样的事情:
template<ratio T>
float foo(const float param) { return param * T::num / static_cast<float>(T::den); }
不幸的是,ratio
不是一个完整的类型,因此根本不起作用。最后我不得不问,为什么不这样做:
template<int Num, int Denom>
float foo(const float param) { return param * Num / static_cast<float>(Denom); }
我更喜欢使用 ratio
,因为它更清楚地代表了我正在尝试做的事情。谁能给我一个简单的方法来使用 ratio
?
没有类型ratio
。 std::ratio
是一个 class 模板。这个模板本身有分子和分母作为模板参数。
如果你想使用std::ratio
,可以这样做:
template<class T>
float foo(const float param) {
return param * T::num / static_cast<float>(T::den);
}
auto x = foo<std::ratio<4,7>>(42);
所以我知道我不能使用 float
作为模板参数:
template<float T>
float foo(const float param) { return param + T; }
听说可以用ratio
代替。我想做这样的事情:
template<ratio T>
float foo(const float param) { return param * T::num / static_cast<float>(T::den); }
不幸的是,ratio
不是一个完整的类型,因此根本不起作用。最后我不得不问,为什么不这样做:
template<int Num, int Denom>
float foo(const float param) { return param * Num / static_cast<float>(Denom); }
我更喜欢使用 ratio
,因为它更清楚地代表了我正在尝试做的事情。谁能给我一个简单的方法来使用 ratio
?
没有类型ratio
。 std::ratio
是一个 class 模板。这个模板本身有分子和分母作为模板参数。
如果你想使用std::ratio
,可以这样做:
template<class T>
float foo(const float param) {
return param * T::num / static_cast<float>(T::den);
}
auto x = foo<std::ratio<4,7>>(42);