【问题标题】:Conversion operator doesn't work with sleep_until转换运算符不适用于 sleep_until
【发布时间】:2018-10-25 09:49:01
【问题描述】:

我尝试在调用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 *'

谁能给我一个提示我在这里做错了什么以及应该如何正确完成?

【问题讨论】:

    标签: c++ std implicit-conversion chrono


    【解决方案1】:

    std::this_thread::sleep_until 是一个函数模板。在模板参数推导过程中,不会考虑转换。

    转换发生在 扣除完成之后。因此,如果您不显式调用它,您的转换运算符将无效。

    【讨论】:

    • 感谢您的回答。除了强制转换或返回 time_point 的成员函数之外,还有其他好的方法吗?
    • 您可以显式调用sleep_until&lt;system_clock, nanoseconds&gt;(a),但这并没有更好。命名成员函数可能是最简单的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 2021-09-28
    • 2016-12-04
    • 1970-01-01
    • 2012-02-21
    • 2011-10-14
    • 1970-01-01
    相关资源
    最近更新 更多