C ++ 11通用函数比较两次之间的差异?

时间:2017-03-14 11:42:41

标签: c++11 chrono

我想编写一个泛型函数,以便我可以比较两个时间戳(我自己的类,从epoch返回纳秒)与我传入的任何std :: chrono :: duration值(秒,毫秒等),所以像:

template<typename PERIOD>
bool IsTimestampWithin(const MyTime t1, const MyTime t2, const rsInt64 units){
    return t2.Nanos() - t1.Nanos() < units;
}

但是,我不确定如何从我的时间戳返回的纳秒数创建std::chrono对象。我能找到的每个例子都是使用系统或高精度时钟转换。

1 个答案:

答案 0 :(得分:1)

您可以duration_cast任意持续时间到std::chrono::nanoseconds,然后use .count()来提取纳秒值。

using std::chrono::duration;
using std::chrono::duration_cast;
using std::chrono::nanoseconds;

template<typename R, typename P>
bool IsTimestampWithin(const MyTime t1, const MyTime t2, const duration<R, P>& units){
    return t2.Nanos() - t1.Nanos() < duration_cast<nanoseconds>(units).count();
}

// usage:

if (isTimestampWithin(previous, now, std::chrono::milliseconds(300))) {
    ...
}

如果您的MyTime可以转换为std::chrono::time_point结构(来自同一时钟源),那么您甚至不需要关心duration_cast,您只需写下:

return t2.to_time_point() - t1.to_time_point() < units;