0
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<Base&> 吗?

4

1 回答 1

2

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

话虽如此,您的代码片段中还有另一个缺陷:从实例std::optional<Base>构造时会遭受对象切片Child。你可以在这里阅读更多内容。

请注意,您还可以使用 和 的-likenullptr状态来指示对象的附加布尔属性。在处理类层次结构时,使用这些智能指针通常很有意义,同时非常适合值类型对象。std::unique_ptrstd::shared_ptrstd::optional

于 2020-10-02T10:07:09.820 回答