Ratio<,> 是常量,但如果我想接受不同的比率作为参数怎么办?

Ratio<,> is constant, but what if I want to accept different ratios as an argument?

也许是一个矛盾的问题:根据定义,ratio<,> 是一个编译时常量。

但是,我想构建具有不同比率的持续时间,这些比率可以由我的方法的调用者指定。我猜我应该使用 ratio and/or duration 以外的东西,但是呢?

我想要一个可以在运行时设置的 class 成员,我希望它的类型为 ratio<,>。在代码中的某个位置,此成员获得 set/assigned,它会被分配一个恒定比率,但在我的 class 中,我不想指定该比率应该是多少。

答案说明了使用 C++ 模板的常见方法:

template<typename ratio_type>
returnvalue function_name(ratio_type const& r, other parameter...)
{ ... }

重点是,比率的类型包含信息。由于类型(通常但不总是)是传递给模板的参数,因此您也可以通过模板转发这些参数。当然,这只会把问题转移到另一个地方,所以在某些时候你会从比率中取出分子和分母,并将其用作值。

顺便说一句:考虑 std::div (http://en.cppreference.com/w/cpp/numeric/math/div) 作为备选方案。

好的,您需要 std::ratio,其中 "can be specified by the caller"。共有三个不同的选项:

  • 调用者想要在编译时间期间设置std::ratio个模板参数。这很简单,只需设置参数,例如using quarter = std::ratio<1, 4>.
  • 调用者想要在运行时期间设置std::ratio个模板参数。这在定义上是不可能的,std::ratio 是一个 编译时间常量 。您将必须实现自己的 class 以在运行时计算比率或使用某种库(我不知道有什么,欢迎提出建议!)。
  • 来电者只想缩放 std::duration(这似乎是您使用 std::ratio 的目的)。然后 multiply it with a number.