Quindi sto lavorando su un formato di file per la memorizzazione di dati strutturati definiti su un certo tipo di intervallo. L'esempio più semplice sarebbe qualcosa di simile ai valori float nel tempo, ma lo sto progettando per consentire più dimensioni e dati arbitrari in ogni punto. Mi piacerebbe anche archiviare la struttura dei dati nell'intestazione del file, in quanto consentirà alcune caratteristiche chiare.Definizione struct introspettiva in C++?
un primo momento ho pensato che avrei avuto l'utente a costruire la loro struttura dei dati utilizzando una gerarchia di classi, così si potrebbe fare qualcosa di simile:
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")));
che sarebbe equivalente a qualcosa di simile a C :
struct {
struct position {
double xp,yp,zp;
}
struct velocity {
double xv,yv,zv;
}
struct acceleration {
double xa,ya,za;
}
}
non è terribile, ma richiede comunque all'utente di definire separatamente ac struct utilizzare effettivamente durante la lettura/scrittura dei dati.
Ho pensato che sarebbe stato bello se avessero potuto definire una normale c-struct passata alla mia libreria e l'ho introspezionata per ottenere le informazioni da scrivere nel file. Anche se non ho idea se qualcosa del genere sia remotamente possibile in C++. Il mio pensiero è che potrebbe usare qualche modello di metaprogrammazione della magia, ma sarebbe estremamente disordinato. Quindi ho pensato di sollecitare alcune idee da quelli che conoscono meglio di me il C++.
sei essenzialmente la creazione di un DSL e non c'è niente da fare intorno lo sforzo che comporta. – wheaties
Sono d'accordo con i bianchi, ma lascia che io lo formuli in modo più positivo: quello che stai facendo è una buona idea, cioè un sound design, e non lasciarci dissuadere da esso. Ma sei qui da solo, il C++ non offre quasi alcun aiuto per questo tipo di lavoro. –
Questo è quello che stavo pensando, ho pensato che avrei dovuto scrivere un parser di struct usando template, ick. –