メソッドがこのようなものを返すとします
boost::optional<SomeClass> SomeMethod()
{...}
今、私はこのようなものを持っているとします
boost::optional<SomeClass> val = SomeMethod();
今私の質問は、 SomeClass を val から抽出するにはどうすればよいですか?
私はこのようなことができるように:
SomeClass sc = val ?
メソッドがこのようなものを返すとします
boost::optional<SomeClass> SomeMethod()
{...}
今、私はこのようなものを持っているとします
boost::optional<SomeClass> val = SomeMethod();
今私の質問は、 SomeClass を val から抽出するにはどうすればよいですか?
私はこのようなことができるように:
SomeClass sc = val ?
逆参照演算子を使用できます。
SomeClass sc = *val;
get()
または、次の方法を使用できます。
SomeClass sc = val.get();
これらはどちらも、基になるSomeClass
オブジェクトへの左辺値参照を返します。
前の回答で述べたように、逆参照演算子と関数get()
には同じ機能があります。どちらも、オプションに有効なデータを含める必要があります。
if (val)
{
// the optional must be valid before it can be accessed
SomeClass sc1 = *val;
SomeClass sc2 = val.get();
}
代替手段は functionvalue()
で、オプションが値を持たない場合に例外をスローします。
// throws if val is invalid
SomeClass sc3 = val.value();
または、関数value_or
とvalue_or_eval
を使用して、値が設定されていない場合に返されるデフォルトを指定できます。