【发布时间】:2014-01-23 23:25:15
【问题描述】:
鉴于std::chrono::duration 可以表示两次之间的有符号差,因此需要这种持续时间的绝对值似乎是一种非常常见的情况。例如,以下代码按预期输出diff: -5:
using namespace std;
using namespace std::chrono;
auto now = system_clock::now();
auto then = now - seconds(5);
auto diff = then - now;
cout << "diff: " << duration_cast<seconds>(diff).count() << endl;
如果能做这样的事情就好了:
auto diff = abs(then - now);
但是,我在标准中看不到std::abs 对chrono 模板的任何特化,在std::chrono::duration 中也看不到任何合适的成员函数。
我应该如何将std::chrono::duration 转换为它的绝对值?
【问题讨论】:
-
我很好奇。在什么情况下会有用?
-
不完美但是:
auto diff = then < now ? now - then : then - now; -
@user2079303 任何需要知道两个时间点 (
time_point) 之间经过的时间 (duration) 但不关心哪个先发生的情况。 -
我正在努力为
abs(duration)实用程序提供不止一种用途,这可能就是它不标准的原因。我认为您将不得不将std::abs应用于持续时间的计数。 -
我不确定您所说的不止一种用途是什么意思。
std::abs应用于int时只有一种用途......它会删除标志。与duration相同。由于duration提供了所有相关的算术运算符,因此当std::abs具有如此明确的用例时,省略它并没有什么意义。毕竟,我们有std::abs用于std::complex和std::valarray。