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)
,但这并不是更好的方法。命名成员函数可能是最简单的。