转换运算符不适用于sleep_until

时间:2018-10-25 09:49:01

标签: c++ std implicit-conversion chrono

我尝试在对std::this_thread::sleep_until的调用中使用带有转换运算符的自定义类。这是我使用的代码:

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 *'

有人能给我一个提示我在这里做错了什么以及应该如何正确地做吗?

1 个答案:

答案 0 :(得分:4)

std::this_thread::sleep_until是功能模板。在模板参数推导期间,将不考虑转换。

转换完成后 推断完成。因此,如果不显式调用转换运算符,则该转换运算符无效。