以下代码执行compile(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 );
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我不知道什么类型t3.它不是timepoint_t,并且用明确给出的类型取消注释行将无法编译.与函数调用相同的:我不能叫do_something用t3.
所以我的问题是:
我知道我可以使用这样的额外演员
// this works
timepoint_t t3 = t0 + std::chrono::duration_cast< std::chrono::milliseconds >(double_prec_seconds(3.14));
Run Code Online (Sandbox Code Playgroud)
但我想避免这种情况.
先感谢您!
转换失败,因为没有转换
std::chrono::time_point< std::chrono::system_clock,
std::chrono::system_clock::duration >
Run Code Online (Sandbox Code Playgroud)
至
std::chrono::time_point< std::chrono::system_clock,
std::chrono::duration< double > >
Run Code Online (Sandbox Code Playgroud)
最简单的方法是给double_prec_seconds模板参数time_point,参见std :: chrono :: time_point
typedef std::chrono::time_point< std::chrono::system_clock,
double_prec_seconds > timepoint_t;
Run Code Online (Sandbox Code Playgroud)
然后你已经有了正确的类型t3和do_something.
| 归档时间: |
|
| 查看次数: |
6983 次 |
| 最近记录: |