0

chrono::durationユーザーがlikeを指定しchrono::secondsて の結果を返すことができる関数を作成しようとしていますchrono::duration::count

次のテンプレート関数を使用してこれを行うことができます。

template<typename D, typename Rep>
Rep getTimeSinceStart(){
    return chrono::duration_cast<D>(chrono::steady_clock::now() - start).count();
    };

この関数を呼び出すには、 の型を指定する必要がありますRep。たとえば、 というオブジェクトがあると仮定すると、が のtimer場合:Replong long

long long sinceStart = timer.getTimeSinceStart<chrono::seconds, long long>();

しかし、単に指定する方法はありますchrono::durationか?

私は次のようなことを考えていました:

template<typename D>
D.rep getTimeSinceStart(){
    return chrono::duration_cast<D>(chrono::steady_clock::now() - start).count();
};

このようにして、次のように呼び出すことができます:

long long sinceStart = timer.getTimeSinceStart<chrono::seconds>();
4

1 に答える 1

2

このようなもの:

#include <thread>
#include <iostream>
#include <chrono>

const std::chrono::steady_clock::time_point start = std::chrono::steady_clock::now();

template<typename D>
typename D::rep getTimeSinceStart(){
    return std::chrono::duration_cast<D>(std::chrono::steady_clock::now() - start).count();
};

int main (int argc, char **argv)
{
    std::this_thread::sleep_for(std::chrono::seconds(2));
    long long sinceStart = getTimeSinceStart<std::chrono::seconds>();
    std::cout << "since start: " << sinceStart << std::endl;

}

上記のコードでstartは、 はグローバルです。これをクラスのメンバーにする必要があります。

于 2015-10-19T18:51:57.753 に答える