次のコードはコンパイルされます ( 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
、明示的に指定されたタイプの行のコメントを外すと、コンパイルされません。関数呼び出しと同じ: I can't call do_something
with t3
.
だから私の質問は:
- 変換が失敗するのはなぜですか?
- 倍精度の秒数を取得する最良の方法は何ですか?
このような追加のキャストを使用できることを知っています
// this works
timepoint_t t3 = t0 + std::chrono::duration_cast< std::chrono::milliseconds >(double_prec_seconds(3.14));
しかし、私はこれを避けたいです。
前もって感謝します!