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

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

本文关键字:比率 参数 怎么办 如果 gt lt      更新时间:2023-10-16

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

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

例如,我想拥有一个可以在运行时设置的类成员,并且我希望它的类型为 ratio<,>。在代码中的某个点,在设置/分配此成员的地方,它将被分配一个恒定比率,但在我的类中,我不想指定该比率应该是什么。

好的,你需要一个"可以由调用者指定">std::ratio。有三种不同的选项:

  • 调用方希望在编译时设置std::ratio模板参数。这是微不足道的,只需设置参数,例如using quarter = std::ratio<1, 4>.
  • 调用方希望在运行时设置std::ratio模板参数。根据定义,这是不可能的,std::ratio是一个编译时常量。您必须在运行时实现自己的计算比率类或使用某种库(我不知道,欢迎建议!
  • 调用方只是想扩展std::duration(这似乎是您使用std::ratio的目的(。然后只需将其乘以一个数字即可。

答案说明了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(作为替代方案。