class Child: public Base {.....}
class Child
{
static std::optional<Base>& Child::GetBaseInstance()
{
static std::optional<Base> instance = std::make_optional<Chid>; \Does not work. Please help
return instance;
}
}
我试图返回一个实例,但它的基类型为std::optional。我还应该返回std::optional&或std::可选<基础>;如果我试图传递相同的引用?
不能将std::optional
用于引用。相反,可以使用原始指针、std::reference_wrapper
或boost::optional
(适用于引用(。
话虽如此,您的代码片段中还有另一个缺陷:当从Child
实例构建std::optional<Base>
时,它会受到对象切片的影响。你可以在这里阅读更多。
请注意,您还可以使用std::unique_ptr
和std::shared_ptr
的类似nullptr
的状态来指示对象的附加布尔属性。在处理类层次结构时,使用这些智能指针通常是有意义的,而std::optional
非常适合值类型对象。