2012-01-22 5 views
38

¿Cómo puedo "restablecer"/"deshacer" un boost::optional?Cómo configurar un impulso :: opcional de nuevo a un estado no inicializado?

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

Es un poco de un misterio para mí por qué no hay 'opcional :: clear' o' opcional :: empty'. – pmr

+1

Probablemente porque no es necesario que haya uno por completo. –

+1

@LightnessRacesinOrbit: ¿Pueden dar más detalles? Estoy viendo esto en el contexto de las variables de miembro opcionales en las que desea restablecer esencialmente parte del estado de un objeto. Tal vez hay una mejor manera de hacerlo. –

Respuesta

76
x = boost::none; 

+3

[citación necesitada] _ (Es por eso que "tuvo" que evadir el límite mínimo de caracteres en las respuestas.) _ –

+0

Algunos más detalles: http://www.boost.org/doc/libs/1_60_0/libs/optional/ doc/html/optional/reference.html # boost_optional.reference.header__boost_none_hpp_ –

10

Una forma sencilla es la siguiente:

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

O simplemente:

x.reset(); 

Destruye el valor actual, dejando esta sin inicializar (por defecto).

+12

['reset()' está en desuso] (http://www.boost.org/doc/libs/1_44_0/libs/optional/doc/html/boost_optional/synopsis.html) – Johnsyweb

+2

Aquí hay [un enlace más específico] (http://www.boost.org/doc/libs/ 1_48_0/libs/optional/doc/html/boost_optional/detailed_semantics.html # reference_optional_reset). Básicamente, la respuesta de Benjamin es el nuevo '.reset();'. – Xeo

Cuestiones relacionadas