tutorial smart programar para introduccion inteligentes inteligente ejemplos crear contratos contrato c++ boost boost-optional

c++ - smart - recuperando un objeto de boost:: opcional



programar contratos inteligentes (3)

Como se mencionó en las respuestas anteriores, el operador de referencia y la función get() tienen la misma funcionalidad. Ambos requieren que el opcional contenga datos válidos.

if (val) { // the optional must be valid before it can be accessed SomeClass sc1 = *val; SomeClass sc2 = val.get(); }

Una alternativa es la función value() , que lanza una excepción si el opcional no tiene un valor.

// throws if val is invalid SomeClass sc3 = val.value();

Alternativamente, las funciones value_or y value_or_eval se pueden usar para especificar los valores predeterminados que se devuelven en caso de que el valor no esté establecido.

Supongamos que un método devuelve algo como esto

boost::optional<SomeClass> SomeMethod() {...}

Ahora supongamos que tengo algo como esto

boost::optional<SomeClass> val = SomeMethod();

Ahora mi pregunta es ¿cómo puedo extraer SomeClass de val?

Para que yo pudiera hacer algo como esto:

SomeClass sc = val ?


Para verificar si el opcional contiene un valor y, opcionalmente, recuperarlo:

boost::optional<SomeClass> x = SomeMethod(); if (x) x.get();

Para obtener el valor opcional, o un valor predeterminado si no existe:

SomeMethod().get_value_or(/*default value*/)


Podría utilizar el operador de referencia:

SomeClass sc = *val;

Alternativamente, puedes usar el método get() :

SomeClass sc = val.get();

Ambos devuelven una referencia de valor SomeClass objeto SomeClass subyacente.