簡體   English   中英

std :: chrono:為time_point添加自定義持續時間

[英]std::chrono: add custom duration to time_point

以下代碼編譯( g++ 4.7.2 ):

#include <chrono>

typedef std::chrono::duration< double > double_prec_seconds;
typedef std::chrono::time_point< std::chrono::system_clock > timepoint_t;

void do_something( const timepoint_t& tm )
{
    // ...
}

int main( int argc, char** argv )
{
    timepoint_t t0 = std::chrono::system_clock::now();
    timepoint_t t1 = t0 + std::chrono::seconds(3);

    // timepoint_t t3 = t0 + double_prec_seconds(3.14);
   auto t3 = t0 + double_prec_seconds(3.14);

    do_something( t1 );
}

我的問題是我不知道t3有什么類型。 它不是timepoint_t ,並且使用明確給定的類型取消注釋行將無法編譯。 與函數調用相同:我不能用t3調用do_something

所以我的問題是:

  • 為什么轉換失敗?
  • 具有雙精度秒持續時間的最佳方法是什么?

我知道我可以使用這樣的額外演員

// this works
timepoint_t t3 = t0 + std::chrono::duration_cast< std::chrono::milliseconds >(double_prec_seconds(3.14));

但我想避免這種情況。

先感謝您!

轉換失敗,因為沒有轉換

std::chrono::time_point< std::chrono::system_clock,
                         std::chrono::system_clock::duration >

std::chrono::time_point< std::chrono::system_clock,
                         std::chrono::duration< double > >

最簡單的方法是將double_prec_seconds作為模板參數提供給time_point ,參見std :: chrono :: time_point

typedef std::chrono::time_point< std::chrono::system_clock,
                                 double_prec_seconds > timepoint_t;

那么你已經有了適合t3do_something類型。

暫無
暫無

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

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