Inicialización de estructuras C++ con declaraciones de “If” en línea por variable.
Estoy intentando inicializar una estructura opcional. Me gustaría tener múltiples declaraciones if por variable. Por ejemplo, este es mi código actual:
struct FooBar {
myObj1 foo;
std::optional<myObj2> bar;
};
static std::optional<FooBar> globalFoo;
void Set(std::optional<int> x, std::optional<int> y)
{
if (x && y)
{
globalFoot = FooBar{ .foo = {<em>x}, .bar = {</em>y} };
}
else if (x && !y)
{
globalFoot = FooBar{ .foo = {<em>x} };
}
else if (!x && y)
{
globalFoot = FooBar{.bar = {</em>y} };
}
}
Me gustaría simplificar esto de alguna manera a:
void Set(std::optional<int> x, std::optional<int> y)
{
globalFoot = FooBar{ /* if x.has_value()*/ .foo = {x}, /* if y.has_value() */ .bar = {y} };
}
Estoy abierto a otras sugerencias, sin embargo, la función Set
debe tener entradas opcionales y la variable global también debe ser opcional.
davy.ai
Para inicializar una estructura opcional con múltiples declaraciones if por variable, se puede utilizar el operador ternario
?
para crear una sentencia condicional. Aquí hay un ejemplo:En este código, usamos el operador ternario
?
para verificar six
ey
tienen valores, e inicializamosfoo
ybar
respectivamente si lo hacen. Si no lo hacen, los inicializamos con valores predeterminados utilizando un par vacío de llaves{}
. Esto nos permite simplificar las declaraciones if e inicializar la variableglobalFoo
con menos líneas de código.