转换运算符不适用于 sleep_until
Conversion operator doesn't work with sleep_until
我尝试在对 std::this_thread::sleep_until
的调用中使用带有转换运算符的自定义 class。这是我使用的代码:
class A
{
public:
...
operator std::chrono::time_point<std::chrono::system_clock>() const {
return std::chrono::time_point<std::chrono::system_clock>{} +
std::chrono::duration_cast<std::chrono::system_clock::duration>(timestamp_); }
private:
std::chrono::nanoseconds timestamp_;
};
A a;
std::this_thread::sleep_until(a); // This doesn't compile (note the overload with time_point).
std::this_thread::sleep_until((std::chrono::time_point<std::chrono::system_clock>)a); // But this does.
编译器错误是error C2664: 'void std::this_thread::sleep_until(const xtime *)': cannot convert argument 1 from 'A' to 'const xtime *'
。
谁能告诉我我做错了什么以及应该如何正确完成?
std::this_thread::sleep_until
是函数模板。在模板参数推导期间,不会考虑转换。
转换发生在 扣除完成之后。因此,如果您不显式调用它,您的转换运算符将不起作用。
我尝试在对 std::this_thread::sleep_until
的调用中使用带有转换运算符的自定义 class。这是我使用的代码:
class A
{
public:
...
operator std::chrono::time_point<std::chrono::system_clock>() const {
return std::chrono::time_point<std::chrono::system_clock>{} +
std::chrono::duration_cast<std::chrono::system_clock::duration>(timestamp_); }
private:
std::chrono::nanoseconds timestamp_;
};
A a;
std::this_thread::sleep_until(a); // This doesn't compile (note the overload with time_point).
std::this_thread::sleep_until((std::chrono::time_point<std::chrono::system_clock>)a); // But this does.
编译器错误是error C2664: 'void std::this_thread::sleep_until(const xtime *)': cannot convert argument 1 from 'A' to 'const xtime *'
。
谁能告诉我我做错了什么以及应该如何正确完成?
std::this_thread::sleep_until
是函数模板。在模板参数推导期间,不会考虑转换。
转换发生在 扣除完成之后。因此,如果您不显式调用它,您的转换运算符将不起作用。