如何向上转换静态 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_ptr
和 std::shared_ptr
的类似 nullptr
的状态来指示对象的附加布尔值 属性。在处理 class 层次结构时,使用这些智能指针通常很有意义,而 std::optional
更适合 value-type 对象。
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_ptr
和 std::shared_ptr
的类似 nullptr
的状态来指示对象的附加布尔值 属性。在处理 class 层次结构时,使用这些智能指针通常很有意义,而 std::optional
更适合 value-type 对象。