是否有更简洁的方式来表示以毫秒和小时为单位的持续时间?

问题描述 投票:0回答:1

此 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>
的一个很好的类比。

c++ c++-chrono units-of-measurement fmt
1个回答
0
投票

chrono 有这些积分表示的别名:

  • std::chrono::milliseconds
  • std::chrono::hours

如果您想要浮点表示,那么您必须自己定义类似的别名,例如

using float_milliseconds = std::chrono::duration<float, std::milli>;

此操作可以完成一次并重复使用。

© www.soinside.com 2019 - 2024. All rights reserved.