2012-01-22 7 views
38

Come posso "resettare"/"disinserire" a boost::optional?Come impostare un boost :: facoltativo per tornare a uno stato non inizializzato?

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

E 'un po' di un mistero per me il motivo per cui non v'è alcun 'opzionale :: clear' o' opzionale :: empty'. – pmr

+1

Probabilmente perché non è necessario che ce ne sia completamente uno. –

+1

@LightnessRacesinOrbit: puoi elaborare? Sto osservando questo nel contesto delle variabili membro facoltative in cui si desidera essenzialmente ripristinare alcuni stati di un oggetto. Forse c'è un modo migliore per farlo. –

risposta

76
x = boost::none; 

+3

[citazione necessaria] _ (Ecco perché "dovevi" eludere il limite minimo di caratteri nelle risposte). _ –

+0

Altri dettagli: http://www.boost.org/doc/libs/1_60_0/libs/optional/ doc/html/opzionale/reference.html # boost_optional.reference.header__boost_none_hpp_ –

10

Un modo semplice è questa:

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

O semplicemente:

x.reset(); 

Distrugge il valore corrente, lasciando questo non inizializzato (default).

+12

['reset()' è deprecato] (http://www.boost.org/doc/libs/1_44_0/libs/optional/doc/html/boost_optional/synopsis.html) – Johnsyweb

+2

Ecco [un link più specifico] (http://www.boost.org/doc/libs/ 1_48_0/libs/opzionale/doc/html/boost_optional/detailed_semantics.html # reference_optional_reset). Fondamentalmente, la risposta di Benjamin è il nuovo '.reset();'. – Xeo

Problemi correlati