【发布时间】:2013-02-24 13:40:29
【问题描述】:
以下代码确实可以编译 (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));
但我想避免这种情况。
提前谢谢你!
【问题讨论】:
-
我使用 typeid(t3).name() 打印了 t3 的类型,将 stdout 管道传输到 c++filt,它说
std::chrono::time_point<std::chrono::system_clock, std::chrono::duration<double, std::ratio<1l, 1000000l> > >。仅供参考。 -
感谢您对工具的提示!我基本上做了同样的事情,只是没有
c++filt,除了一个神秘的名字外,没有什么“有用的”。c++filt似乎有帮助,不知道。