比率<,> 是恒定的,但如果我想接受不同的比率作为参数怎么办?
Ratio<,> is constant, but what if I want to accept different ratios as an argument?
也许是一个矛盾的问题: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(作为替代方案。
相关文章:
- 如何反转整数参数包
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用默认参数等选择模板专业化
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 函数调用中参数的顺序重要吗
- 部分定义/别名模板模板参数
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 使用不带参数的函数访问结构元素
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 如何使用Luacneneneba API正确读取字符串和表参数
- 在派生函数中指定void*参数
- 视图中的参数推导失败:take_while
- static_assert在宏中,但也可以扩展到可以用作函数参数的东西
- 使用指向成员的指针将成员函数作为参数传递
- 没有名称的C++模板参数
- 比率<,> 是恒定的,但如果我想接受不同的比率作为参数怎么办?