假設一個方法返回這樣的事情檢索從boost ::可選對象
boost::optional<SomeClass> SomeMethod()
{...}
現在假設我有這樣的事情
boost::optional<SomeClass> val = SomeMethod();
現在我的問題是我怎麼能提取出SomeClass的的val?
,這樣我可以做這樣的事情:
SomeClass sc = val ?
假設一個方法返回這樣的事情檢索從boost ::可選對象
boost::optional<SomeClass> SomeMethod()
{...}
現在假設我有這樣的事情
boost::optional<SomeClass> val = SomeMethod();
現在我的問題是我怎麼能提取出SomeClass的的val?
,這樣我可以做這樣的事情:
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
可用於指定要在該情況下,未設置值返回默認值。