Así que estoy trabajando en un formato de archivo para almacenar datos estructurados definidos en algún tipo de rango. El ejemplo más simple sería algo así como valores flotantes en el tiempo, pero lo estoy diseñando para permitir múltiples dimensiones y datos arbitrarios en cada punto. También me gustaría almacenar la estructura de los datos en el encabezado del archivo porque permitirá algunas características interesantes.¿Definición de estructura de introspección en C++?
Al principio pensé que tendría al usuario construir su estructura de datos utilizando una jerarquía de clases, por lo que podría hacer algo como esto:
pf_type data = record(PF_DOUBLE) (
record("position")(
field("xp") &
field("yp") &
field("zp")) &
record("velocity")(
field("xv") &
field("yv") &
field("zv")) &
record("acceleration")(
field("xa") &
field("ya") &
field("za")));
lo que equivaldría a algo como esto en C :
struct {
struct position {
double xp,yp,zp;
}
struct velocity {
double xv,yv,zv;
}
struct acceleration {
double xa,ya,za;
}
}
no es terrible, pero aún requiere que el usuario defina por separado ac estructura de utilizar realmente al leer/escribir los datos.
Pensé que sería genial si solo pudieran definir una estructura común que pasaron a mi biblioteca y la introspeché para obtener la información para escribir en el archivo. Aunque no tengo idea si algo así es remotamente posible en C++. Mi pensamiento es que podría estar usando alguna plantilla de metaprogramación mágica pero que sería extremadamente desordenado. Así que pensé en solicitar algunas ideas de aquellos que saben más sobre C++ que yo.
que está creando esencialmente un DSL y no hay que reconocer el esfuerzo que conlleva. – wheaties
Estoy de acuerdo con wheaties, pero permítanme formularlo de manera más positiva: lo que están haciendo es una buena idea, es decir, es un diseño de sonido, y no dejen que lo disudemos de él. Pero estás solo aquí, C++ casi no ofrece ayuda para este tipo de trabajo. –
Eso es lo que estaba pensando, pensé que básicamente tendría que escribir un analizador de estructuras usando plantillas, ick. –