Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 转换运算符不使用';在你睡觉之前不要工作_C++_Std_Implicit Conversion_Chrono - Fatal编程技术网

C++ 转换运算符不使用';在你睡觉之前不要工作

C++ 转换运算符不使用';在你睡觉之前不要工作,c++,std,implicit-conversion,chrono,C++,Std,Implicit Conversion,Chrono,我尝试在调用std::this\u thread::sleep\u until时使用带有转换运算符的自定义类。以下是我使用的代码: class A { public: ... operator std::chrono::time_point<std::chrono::system_clock>() const { return std::chrono::time_point<std::chrono::system_clock>{} +

我尝试在调用
std::this\u thread::sleep\u 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.
A类
{
公众:
...
运算符std::chrono::time_point()常量{
返回std::chrono::time_point{}+
std::chrono::duration_cast(时间戳);}
私人:
std::chrono::纳秒时间戳;
};
A A;
std::this_thread::sleep_until(a);//这不会编译(注意带有时间点的重载)。
std::this_thread::sleep_until((std::chrono::time_point)a);//但这是真的。
编译器错误是
错误C2664:“void std::this_thread::sleep_until(const xtime*)”:无法将参数1从“A”转换为“const xtime*”


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

std::this\u thread::sleep\u,直到
成为函数模板为止。在模板参数推导过程中,将不考虑转换


扣减完成后进行转换。因此,如果不显式调用转换运算符,则转换运算符无效。

谢谢您的回答。除了cast或返回时间点的成员函数之外,还有其他更好的方法吗?您可以显式调用
sleep\u直到(a)
,但这并不是更好的方法。命名成员函数可能是最简单的。