メソッドが次のようなものを返すとします
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
_を使用して、値が設定されていない場合に返されるデフォルトを指定できます。