2017-02-28 4 views
0

私はこれを探していましたが、正確な問題の解決策を見つけることはできませんでした。C++ stdでは、実行時にクロノスの長さを選択する方法

つまり、std :: chronos変数の継続時間を計算で定義する方法はありますか?例えば次のコードを取る:

auto timed = std::chrono::duration_cast<std::chrono::microseconds>(t1-t0).count(); 

私はいくつかの関数のコードの実行時間を計測するカスタムTimerクラスのことを使用します。私がやろうとしているのは、microsecondsmilliseconds、またはsecondsのように結果を保存するかどうかを1つのカムが定義するswitchを作成することです。

これをC++で達成する方法は何でしょうか?

+2

あなたは常に最高解像度の結果を保存し、それを変換することができます誰かが低解像度でそれを求めるとき –

答えて

0

あなたはこれに似た何かをすることができます(scstd::chronoです)。

class Timer { 
    sc::time_point<sc::steady_clock> _start; 

    Timer() : _start(sc::steady_clock::now()) { 
    } 

    template <class Unit> 
    int getElapsed() { 
     return sc::duration_cast<Unit>(sc::steady_clock::now() - _start).count(); 
    } 
}; 

使用法:あなたは実行時に単位の簡単なスイッチが必要な場合は

Timer t; 
... 
t.elapsed<sc::milliseconds>(); 

今、ちょうどラップあなたはキャストがテンプレートパラメータ(コンパイル時のパラメータ)で見ることができるようにappropiateキャストであなたのTimer::getElapsed機能をインスタンス化しますが、少なくとも、単純な例のために行われている機能にあなたのテンプレート関数:

enum class UnitCount { ms, s }; 

int Timer::getElapsedInUnits(UnitCount c) { 
    switch (c) { 
     case UnitCount::ms: 
     return this->getElapsed<sc::milliseconds>(); 
     case UnitCount::s 
     ... 
    } 
} 
+1

ありがとう、良い優雅な解決策 –

関連する問題