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

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?

没有类型ratiostd::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);