从boost::optional中检索对象
retrieving an object from boost::optional
假设一个方法返回如下内容
boost::optional<SomeClass> SomeMethod()
{...}
现在假设我有这样的东西
boost::optional<SomeClass> val = SomeMethod();
现在我的问题是如何从val中提取SomeClass ?
所以我可以这样写:
SomeClass sc = val ?
可以使用取消引用操作符:
SomeClass sc = *val;
也可以使用get()
方法:
SomeClass sc = val.get();
它们都返回一个对底层SomeClass
对象的左值引用。
检查可选项是否包含值,并检索该值:
boost::optional<SomeClass> x = SomeMethod();
if (x)
x.get();
获取可选值,如果不存在则获取默认值:
SomeMethod().get_value_or(/*default value*/)
在前面的回答中提到,取消引用运算符和函数get()
具有相同的功能。两者都要求可选选项包含有效的数据。
if (val)
{
// the optional must be valid before it can be accessed
SomeClass sc1 = *val;
SomeClass sc2 = val.get();
}
另一种选择是函数value()
,如果可选项不携带值,则抛出异常。
// throws if val is invalid
SomeClass sc3 = val.value();
或者,函数value_or
和value_or_eval
可用于指定在未设置值时返回的默认值。
相关文章:
- 如何检索由带通配符的字符串索引的对象
- 用于从可能不存在的容器中检索对象的 API 设计
- 在 c++ 中使用指向对象的指针检索数据
- 通过 std::bind 从对象成员检索值
- 将 JSON 对象作为参数在 JNI 中传递给 CPP,并在 CPP 中检索 JSON 对象的数据
- C++ 从树中检索对象
- 检索不同类型的对象指针
- 如何在Boost Serialization中检索多个对象值
- 使用Boost序列化保存和检索多个对象
- C++ 无法检索自定义矢量中的对象
- 如何通过先前存储的ID从结构对象中检索值?C
- 在另一个中检索JSON对象
- c++使用字符串句柄对对象进行通用存储和检索
- 插入>>运算符重载:从 CIN 检索对象的 CTOR 参数时的异常处理
- 根据对象的类型从矢量中检索对象
- 仅检索对象的类型
- 从数组中检索对象的值
- 从boost::optional中检索对象
- 从映射中检索对象实例
- 检索对象的函数操作符的参数类型