c++ - 我如何使用比率而不是 float ?

标签 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 的简单方法吗?

最佳答案

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

关于c++ - 我如何使用比率而不是 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51800279/

相关文章:

c++ - 初始化具有大小的结构 vector 时出错

c++ - 带有原始音频记录和回放示例的跨平台 C/C++ 库

c++ - 如何获取C++11参数包中的类型?

c++ - 微软为何放弃 long double 数据类型?

c# - Javascript float 与 C# float 相比

c++ - 如何使用 lambda 作为连接处理程序调用 boost async_connect 作为成员函数

c++ - 如何查看预处理后文件的外观?

c - 理解 C 中的 Float

c++ - 我可以在 lambda 中使用可变参数模板吗?

c++ - 如何减少模板繁重的 C++ 代码的输出大小?