2012-01-22 17 views
38

boost::optionalを「リセット」/「設定解除」するにはどうすればよいですか?boost :: optionalを非初期化状態に戻す方法を教えてください。

optional<int> x; 

if(x) 
{ 
    // We won't hit this since x is uninitialized 
} 
x = 3; 
if(x) 
{ 
    // Now we will hit this since x has been initialized 
} 
// What should I do here to bring x back to uninitialized state? 
if(x) 
{ 
    // I don't want to hit this 
} 
+1

なし 'オプション:: clear'または'オプション:: empty'が存在しない理由は私には謎の少しです。 – pmr

+1

おそらく完全に1つである必要はないからです。 –

+1

@ LightnessRacesinOrbit:あなたは精巧にできますか?私は、基本的にオブジェクトの状態のいくつかをリセットしたいオプションのメンバ変数のコンテキストでこれを見ています。おそらくそれを行うためのより良い方法があります。 –

答えて

76
x = boost::none; 

+3

_(これが答えの文字の最小限度を回避していた理由です)_ –

+0

詳細:http://www.boost.org/doc/libs/1_60_0/libs/optional/ doc/html/optional/reference.html#boost_optional.reference.header__boost_none_hpp_ –

10

一つの簡単な方法はこれです:それは、この初期化されていない(デフォルト)を残し、現在の値を破壊する

x.reset(); 

x = optional<int>(); //reset to default 

それとも単に。

+12

['reset()'は非推奨] /www.boost.org/doc/libs/1_44_0/libs/optional/doc/html/boost_optional/synopsis.html) – Johnsyweb

+2

[より具体的なリンク](http://www.boost.org/doc/libs/) 1_48_0/libs/optional/doc/html/boost_optional/detailed_semantics.html#reference_optional_reset)。基本的に、Benjaminの答えは新しい '.reset();'です。 – Xeo

関連する問題