Ill*_*ion 5 c++ milliseconds seconds c++-chrono
我有简单的功能:
void foo(std::chrono::milliseconds ms) {
std::cout << ms.count() << " milliseconds" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
接下来我这样称呼他们:
int main() {
using namespace std::chrono_literals;
boo(3s);
boo(1h);
boo(100ms);
}
Run Code Online (Sandbox Code Playgroud)
输出很简单:
3000 milliseconds
3600000 milliseconds
100 milliseconds
Run Code Online (Sandbox Code Playgroud)
但是,如果我想像这样使用这个函数怎么办:
boo(3.5s);
boo(0.5s);
boo(0.3days);
Run Code Online (Sandbox Code Playgroud)
然后我编译错误。所以,我可以编写接收的函数chrono::duration:
3000 milliseconds
3600000 milliseconds
100 milliseconds
Run Code Online (Sandbox Code Playgroud)
然后3.5s会起作用,但1h或3.5h不起作用。那么,问题是,我可以编写通用函数将1s// 1.s/ 1m/ 1.5m/ 1h/ 1.5hetc 中的任何一个转换为毫秒吗?也许我可以创建chrono::seconds/小时的重载运算符?还是只是投、投、投?
正确的函数模板定义也应该将句点作为模板参数:
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\n";
}
Run Code Online (Sandbox Code Playgroud)
或者在C++20中,不调用.count()并让它自动打印单位:
template <class Rep, class Period>
void boo(std::chrono::duration<Rep, Period> duration) {
std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(duration)
<< '\n';
}
Run Code Online (Sandbox Code Playgroud)
但我对字面意思一无所知days。没见过,但其余的都可以。
int main() {
using namespace std::chrono_literals;
boo(3s);
boo(1h);
boo(100ms);
boo(3.5s);
boo(0.5s);
boo(std::chrono::days(1) * 0.3); // what I got working
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
274 次 |
| 最近记录: |