如何声明一个可以设置为std :: chrono :: milliseconds类型的参数的变量

时间:2017-11-30 10:18:38

标签: c++ c++11 chrono

我有以下方法可以摄入std::chrono::milliseconds

void SomeMethod(std::chrono::milliseconds some_value) {

  // some logic
}

我可以通过以下方式调用它:

using namespace std::chrono_literals;
SomeMethod(1000ms);

作品。
但是,我想通过传递成员变量或一些全局声明的变量以下面的方式调用它。像这样的东西,

using namespace std::chrono_literals;
std::chrono::system_clock::duration timeout = 3000ms;

但是我收到以下错误:

error: no viable conversion from 'duration<[...], ratio<[...], 1000000>>' to 'duration<[...], ratio<[...], 1000>>'
SomeMethod(some_value);
                                                                             ^~~~~~~

1 个答案:

答案 0 :(得分:7)

错误消息告诉您正在尝试将微秒转换为毫秒。 system_clock::duration必须是您平台上std::chrono::microseconds的typedef。

您可以在milliseconds行中隐式转换microsecondsstd::chrono::system_clock::duration timeout = 3000ms;,但转换为需要duration_cast的其他方式:

std::chrono::duration_cast<std::chrono::milliseconds>(timeout);