此 C++ 代码片段以毫秒和小时为单位打印持续时间:
#include <iostream>
#include <chrono>
#include <thread>
using namespace std;
using namespace std::chrono;
int main() {
auto t0 = high_resolution_clock::now();
this_thread::sleep_for(300ms);
auto t1 = high_resolution_clock::now();
cout << duration<float, milli>{t1-t0}.count() << "\n";
cout << duration<float, ratio<3600>>{t1-t0}.count() << "\n";
}
有没有更简单、更简洁的方式来以各种时间单位来表达这个持续时间?
ratio<3600>
看起来特别笨重。我宁愿有一些带有 hour
的东西。另外,我更喜欢一个选项,它可以与当前的 fmt
库(https://fmt.dev/10.2.0/)很好地配合。例如,t1-t0
可以与 iostream
配合使用,但不能与 fmt
配合使用。
我花了时间研究和试验基于 https://en.cppreference.com/w/cpp/chrono/duration 的时间单位,我得到的只是大量且长的模板 barf。不知道为什么有人认为
duration<float, hour>
不是 duration<float, milli>
的一个很好的类比。
chrono 有这些积分表示的别名:
std::chrono::milliseconds
std::chrono::hours
如果您想要浮点表示,那么您必须自己定义类似的别名,例如
using float_milliseconds = std::chrono::duration<float, std::milli>;
此操作可以完成一次并重复使用。