我似乎错过了一些非常简单的事情。以下不起作用:
#include <optional>
class Alpha {
Alpha() { }
Alpha(const Alpha& that) { }
Alpha(Alpha&& that) { }
~Alpha() { }
static std::optional<Alpha> go() {
return Alpha();
}
};
我得到的错误是:
no suitable user-defined conversion from "Alpha" to "std::optional<Alpha>" exists
T in optional<T> must satisfy the requirements of Destructible
'return': cannot convert from 'Alpha' to 'std::optional<Alpha>'
我错过了什么,你可以解释一下原因吗?
答案 0 :(得分:5)
您将所有构造函数设为私有。 std::optional
无法移动或复制您的课程。要解决这个问题,只需执行此操作:
class Alpha {
public: // <--- there
Alpha() { }
Alpha(const Alpha& that) { }
Alpha(Alpha&& that) { }
~Alpha() {}
private:
static std::optional<Alpha> go() {
return Alpha();
}
};
您还可以使用struct
,默认情况下这是一个包含公共成员的类。
另外,请记住,默认的构造函数和赋值运算符通常在你只是放空的那些地方更好,更高效。