C++ 接受std::chrono::任何表示/期间的持续时间
我想要一个函数接受调用方认为有意义的任何单位的持续时间 例如:C++ 接受std::chrono::任何表示/期间的持续时间,c++,c++11,C++,C++11,我想要一个函数接受调用方认为有意义的任何单位的持续时间 例如: transition->after(chrono::seconds(3)); transition->after(chrono::milliseconds(500)); transition->after(chrono::hours(1)); 在函数之后,此函数的有效签名是什么样的?我可以避免将其作为模板函数吗?有几个常见选项 1) 使用模板。这样做的优点是没有转换,但需要使用模板,这可能是不可能的。例如,如果这
transition->after(chrono::seconds(3));
transition->after(chrono::milliseconds(500));
transition->after(chrono::hours(1));
在函数之后,此
函数的有效签名是什么样的?我可以避免将其作为模板函数吗?有几个常见选项
1) 使用模板。这样做的优点是没有转换,但需要使用模板,这可能是不可能的。例如,如果这是虚拟函数的接口
template<typename Rep, typename Period>
void after( std::chrono::duration< Rep, Period > t);
3) 使用双重表示法,如果精度不是问题,但接受所有输入的能力是问题,则该方法非常有用。这将隐式转换任何持续时间,因为所有期间都允许转换为浮点类型。例如,如果您想要双精度秒,您可以这样做
void after( std::chrono::duration< double > t);
void-after(std::chrono::durationt);
我想说的是,只要接受您内部使用的任何一种,然后让duration
进行转换。非常感谢您提供了这个出色的答案。你的第二个建议对我很有效。毫无疑问,其他人也将从这种选择中受益,并找到满足他们需求的最佳方法。从c++20开始,也可以在(std::chrono::duration t)之后执行void代码>:)
void after( std::chrono::duration< double > t);