25

メソッドがこのようなものを返すとします

boost::optional<SomeClass> SomeMethod()
{...}

今、私はこのようなものを持っているとします

boost::optional<SomeClass> val = SomeMethod();

今私の質問は、 SomeClass を val から抽出するにはどうすればよいですか?

私はこのようなことができるように:

SomeClass sc = val ?
4

3 に答える 3

30

逆参照演算子を使用できます。

SomeClass sc = *val;

get()または、次の方法を使用できます。

SomeClass sc = val.get();

これらはどちらも、基になるSomeClassオブジェクトへの左辺値参照を返します。

于 2013-06-05T20:00:16.073 に答える
6

前の回答で述べたように、逆参照演算子と関数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_orvalue_or_evalを使用して、値が設定されていない場合に返されるデフォルトを指定できます。

于 2016-05-26T09:44:46.093 に答える