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