我有简单的功能,比如
void foo(std::chrono::milliseconds ms) {
std::cout << ms.count() << " milliseconds" << std::endl;
}
接下来我会通过
给他们打电话int main() {
using namespace std::chrono_literals;
boo(3s);
boo(1h);
boo(100ms);
}
输出很简单:
3000 milliseconds
3600000 milliseconds
100 milliseconds
但是,如果我想使用此功能怎么办:
boo(3.5s);
boo(0.5s);
boo(0.3days);
然后我编译错误。 所以,我可以编写接收 chrono::duration:
的函数template<class T>
void foo(std::chrono::duration<T> duration) {
std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(duration).count() << " milliseconds" << std::endl;
}
然后 3.5 秒就可以了,但是 1 小时或 3.5 小时就不行了。 那么,问题是,我可以编写通用函数将 1s/1.s/1m/1.5m/1h/1.5h/etc 中的任何一个转换为毫秒吗? 也许我可以为 chrono:: 秒/小时创建重载运算符? 还是只是投、投、投?
我正在尝试下面/上面描述的所有内容
正确的函数模板定义也应该将句点作为模板参数:
template <class Rep, class Period>
void boo(std::chrono::duration<Rep, Period> duration) {
std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(duration)
.count()
<< " milliseconds" << std::endl;
}
我对
days
的字面意思一无所知。没见过,但其余的都可以。