c++ - geeksforgeeks - Iterar a través de variables struct
print iterator vector c++ (4)
Quiero obtener un iterador para estructurar la variable para establecer una en particular en el tiempo de ejecución de acuerdo con enum ID. por ejemplo -
struct {
char _char;
int _int;
char* pchar;
};
enum {
_CHAR, //0
_INT, //1
PCHAR //2
};
int main()
{
int i = 1; //_INT
//if i = 1 then set variable _int of struct to some value.
}
¿Puedes hacer eso sin if / else o cambiar las declaraciones de casos?
C ++ no es compatible con esto. Para iterar sobre los miembros de la estructura, necesitará alguna forma de saber qué son los miembros de la estructura. Los programas compilados de C ++ no poseen esta información. Para ellos, una estructura es solo una colección de bytes.
Los lenguajes como C # (cualquier cosa .NET en realidad) y Java pueden hacerlo porque almacenan información sobre las estructuras (información de reflexión) junto con el programa.
Si realmente está desesperado por esta característica, puede intentar implementar esto analizando el archivo de símbolos creado por el compilador. Sin embargo, esto es extremadamente avanzado y es poco probable que valga la pena el esfuerzo.
No, C ++ no es compatible con esto directamente.
Sin embargo, puedes hacer algo muy similar usando boost :: tuple :
enum {
CHAR, //0
INT, //1
DBL //2
};
tuple<char, int, double> t(''b'', 1, 3.14);
int i = get<INT>(t); // or t.get<INT>()
También es posible que desee echar un vistazo a boost :: variant .
No. C y C ++ no permiten esto.
Tienes que de las sentencias if / else o switch / case.
Nop. En C ++ normalmente haces algo como esto para las enumeraciones:
enum VarTypes {
vtChar = 0,
vtInt,
vtDouble,
vtFirst = vtChar,
vtLast = vtDouble
};
Aún necesitaría un bloque de conmutadores para configurar los miembros en la estructura. Si le apetece, eche un vistazo a la implementación de Variant en el código de Microsoft. Eso es similar a lo que estás haciendo.