Cómo codificar grandes estructuras de datos constantes y complejas en C ++
En el pasado, he usado gcc's.Extensión de literal compuesto de estilo C99 a C ++ para codificar estructuras de datos constantes anidadas en el código. Aquí hay un ejemplo:
#include <iostream>
using namespace std;
struct Tree {
const char *name;
const Tree *left;
const Tree *right;
};
const Tree *const tree = (Tree []) {
"top", // name
(Tree[]) {
"left",
0,
0
},
(Tree[]) {
"right",
0,
0
}
};
static void dump(const Tree *tree) {
if (!tree) {
cout << "null";
return;
}
cout << tree->name << "(";
dump(tree->left);
cout << ", ";
dump(tree->right);
cout << ")";
}
int main(void) {
dump(tree);
cout << "\n";
}
La idea es usar la duración del almacenamiento estático para estas estructuras constantes razonablemente grandes, con cero costos de inicialización y, de hecho, no es necesario almacenar nada en la memoria a menos que sea necesario.
Sin embargo, esto ya no funciona en la versión reciente de clang, y el último OS X incluye un clang con el nombre 'gcc'. Así que necesito una solución diferente.
¿Cuál es la mejor expresión idiomática que se ajusta a la norma para esto en C ++?
Particularmente, no quiero pagar el costo de construir todos los objetos en estas estructuras, por lo que si se puede evitar, sería grandioso.