2017-03-14 9 views
0

私は、何かstd :: chrono :: durationの値(秒、ミリ秒など)を使って2つのタイムスタンプ(自分のクラス、エポックからナノ秒を返します)を比較できるように汎用関数を作成したいと思います。 :C++ 11 2回の違いを比較する汎用関数ですか?

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

はしかし、私はナノ秒私のタイムスタンプを返すの数からstd::chronoオブジェクトを作成する方法を不確実です。私が見つけることができるすべての例は、システムまたは高精度クロックキャストを使用していました。

答えて

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; 
関連する問題