如何向上转换静态 std::optional

How to upcast an static std::optional

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;
    }
}

我正在尝试 return 一个实例,但其基础类型为 std::optional。如果我想传递相同的引用,我还应该 returning std::optional& 或 std::optional 吗?

您不能使用 std::optional 作为参考。相反,要么使用原始指针,std::reference_wrapper,要么 boost::optional(适用于引用)。

也就是说,您的代码片段中还有另一个缺陷:std::optional<Base> 在从 Child 实例构造时会受到对象切片的影响。您可以阅读更多关于 here.

的内容

请注意,您还可以使用 std::unique_ptrstd::shared_ptr 的类似 nullptr 的状态来指示对象的附加布尔值 属性。在处理 class 层次结构时,使用这些智能指针通常很有意义,而 std::optional 更适合 value-type 对象。