问题描述
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 :: optional
解决方法
您不能使用std::optional
作为参考。而是使用原始指针,std::reference_wrapper
或boost::optional
(适用于引用)。
话虽这么说,您的代码片段还有另一个缺陷:std::optional<Base>
在由Child
实例构造时遭受对象切片的困扰。您可以阅读有关here的更多信息。
请注意,您还可以使用nullptr
和std::unique_ptr
的类似std::shared_ptr
的状态来指示对象的其他布尔属性。在处理类层次结构时,使用这些智能指针通常很有意义,而std::optional
非常适合于值类型对象。