我想要一个函数来接受对调用者有意义的任何单位的持续时间.
例如:
transition->after(chrono::seconds(3));
transition->after(chrono::milliseconds(500));
transition->after(chrono::hours(1));
这个after函数的有效签名是什么样的?我可以避免使它成为模板化的功能吗?
Dav*_*e S 25
有一些常见的选择
1)使用模板.这样做的优点是没有转换,但需要使用模板,这可能是不可能的.例如,如果这是虚拟功能的接口.
template<typename Rep, typename Period>
void after( std::chrono::duration< Rep, Period > t);
2)使用整数表示,以及您的接口所需的最低周期.例如,如果您的函数实际上只需要纳秒,那么您可以直接使用它.如果不会发生精度损失,这将隐式转换为纳秒.您可以使用预定义的期间指定其他期间,或者将其明确指定为持续时间的一部分
void after( std::chrono::nanoseconds t) ;
3)使用双重表示,如果精度不是问题,但是接受所有输入的能力是有用的.这将隐式转换任何持续时间,因为所有时段都允许转换为浮点类型.例如,如果你想要双精度秒,你就可以
void after( std::chrono::duration< double > t);