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.