如何使用比率而不是浮点数?

How do I use ratio Instead of a float?

本文关键字:浮点数 何使用 比率      更新时间:2023-10-16

所以我知道我不能使用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是一个类模板。此模板本身具有分子和分母作为模板参数。

如果你想使用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);