2010-10-05 16 views
5

Estoy buscando una API que se pueda usar para volcar la mayoría de las estructuras de datos, ¿hay alguna en c/C++?¿Hay algo así como var_dump de PHP en c/C++?

+0

Yo no lo creo. C/C++ no está diseñado para este tipo de cosas. Lo mejor es que te busques en Internet lo que los diferentes tipos de datos pueden hacer, ect. –

Respuesta

1

boost tiene una biblioteca de serialización que puede usar explícitamente para hacer que sus estructuras de datos sean descargables.

Si desea que suceda más automáticamente, sus opciones son sombrías. Un programa C++ puede inspeccionar sus propios símbolos de depuración o compilar algún código adicional, tal vez generado automáticamente con referencia a la salida GCC-XML, o utilizando una herramienta como OpenC++ para autogenerar algunos metadatos.

3

Estoy buscando una API que se pueda usar para volcar la mayoría de las estructuras de datos, ¿hay alguna en c/C++?

Respuesta corta: No, no lo hay.

Respuesta más larga: C++ no tiene reflejo. Es decir, no hay forma de analizar estructuras de datos desconocidas en tiempo de ejecución. Tendrá que escribir rutinas de volcado usted mismo para cualquier estructura de datos que desee volcar, basándose en lo que está disponible para sus miembros de datos.

Sin embargo, tenga en cuenta que C++ tiene una gran cantidad de herramientas para que sea más fácil. Por ejemplo, dada una sencilla genérica dump() plantilla:

template< typename T > 
inline void dump(std::ostream& os, const T& obj) {os << obj;} 

los elementos de cualquier secuencia se puede volcar el uso de esta función simple:

template< typename OutIt > 
void dump(std::ostream& os, OutIt begin, OutIt end) 
{ 
    if(begin != end) 
    os << *begin++; 
    while(begin != end) { 
    os << ", "; 
    dump(*begin++); 
    } 
} 
+0

Necesita una especialización para 'std :: pair <>' para volcar set <> sy map <> s. Algunas complicaciones, p. cadenas de escape, precisión de coma flotante ... –

+0

@Tony: Sí, para mapas y multimaps (no para conjuntos, sin embargo), de hecho, es necesaria una sobrecarga. (Sin especialización, por cierto, ya que tendría que ser una especialización _partial_, que no tenemos para plantillas de funciones, porque hay sobrecarga ...) Y, sí, para algunos otros tipos es posible que desee agregar más sobrecargas. Sin embargo, deliberadamente dejé esto como un simple ejemplo. Ya te lleva bastante lejos como está. – sbi

Cuestiones relacionadas