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

时间:2018-08-11 13:49:08

标签: c++ templates floating-point metaprogramming

所以我知道我不能使用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的简单方法吗?

1 个答案:

答案 0 :(得分:2)

没有类型180$ratio是一个类模板。该模板本身具有分子和分母作为模板参数。

如果您想使用std::ratio,可以这样做:

std::ratio