也许是一个矛盾的问题:ratio<,>根据定义,是一个编译时常量。
但是,我想构建具有不同比率的持续时间,这些比率可以由我的方法的调用者指定。我猜我应该使用比率和/或持续时间以外的东西,那么,但是什么?
例如,我想要一个可以在运行时设置的类成员,并且我希望它是 ratio<,> 类型。在代码中的某个时刻,该成员被设置/分配,它将被分配一个恒定的比率,但在我的班级中,我不想指定该比率应该是多少。
也许是一个矛盾的问题: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)作为替代方案。