次のコードはコンパイルしない(g++ 4.7.2
)time_pointに追加:のstd ::クロノ:カスタム期間は
#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));
のような追加キャストを使用することができます知っているが、私はこれを避けたいです。
ありがとうございます!
typeid(t3).name()を使用してt3のタイプを出力し、C++ filtにstdoutをパイプし、 'std :: chrono :: time_point> 'となります。ちょうどFYI。 –
ツールを使ってヒントをお願いします!私は基本的に同じことをしました。ちょうど 'C++ filt'がなくて、わかりやすい名前を除いて「役に立つ」ものは何も見つかりませんでした。 'C++ filt'は助けているようだが、それを知らなかった。 –