簡體   English   中英

帶有chrono :: duration參數的模板函數,並返回chrono :: duration :: count的結果

[英]Template function with chrono::duration parameter and returning result of chrono::duration::count

我正在嘗試編寫一個函數,允許用戶指定chrono::durationchrono::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>();

像這樣的東西:

#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是全局的-您將希望使其成為您的類的成員。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM