2012-01-22 95 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

@LightnessRacesinOrbit:你能否詳細說明一下?我在可選成員變量的上下文中查看這個,你想要重置一些對象的狀態。也許有更好的方法來做到這一點。 –

回答

76
x = boost::none; 

+3

[引用需要] _(這就是爲什麼你「必須」迴避回答中字符的最小限制。)_ –

+0

一些更多詳情:http://www.boost.org/doc/libs/1_60_0/libs/optional/ DOC/HTML /可選/#的reference.html boost_optional.reference.header__boost_none_hpp_ –

10

一個簡單的方法是這樣的:

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

或者乾脆:

x.reset(); 

它破壞的電流值,離開這個未初始化(默認)。

+12

['reset()'is deprecated](http:/ /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 /庫/可選/ DOC/HTML/boost_optional/detailed_semantics.html#reference_optional_reset)。基本上,本傑明的答案是新的'.reset();'。 – Xeo