¿Alguien sabe de una instalación de "nivel de idioma" para decapado en C++? No quiero algo como la serialización de Boost, o los Buffers de Protocolo de Google. En cambio, algo que podría serializar automáticamente a todos los miembros de una clase (con la opción de excluir algunos miembros, ya sea porque no son serializables, o bien porque no me importa guardarlos para más adelante). Esto podría lograrse con una acción adicional en el tiempo de análisis, que generaría código para manejar la serialización automática. ¿Alguien ha oído hablar de algo así?Decapado de estilo Python para C++?
Respuesta
No creo que haya ninguna forma de hacer esto en un lenguaje sin capacidades de introspección en tiempo de ejecución.
Existe la serialización estándar de C++ con los operadores < < y >>, aunque tendrá que implementarlos para cada una de sus clases (lo que parece que no desea hacer). Algunos practicantes dicen que siempre debes implementar estos operadores, aunque por supuesto, la mayoría de nosotros rara vez lo hacemos.
quizás xml Enlace de datos? gsoap es solo una de las muchas opciones. Puede generar automáticamente código para la asignación entre la estructura de datos y el esquema xml. No estoy seguro de que configurar esto sea más fácil que otras opciones que mencione
Una manera rápida de hacer esto que conseguí trabajando una vez cuando necesitaba guardar una estructura en un archivo era lanzar mi estructura a una matriz char
y escribir a un archivo. Luego, cuando quería volver a cargar mi estructura, leía todo el archivo (en modo binario) y lo convertía en el tipo de mi estructura. Lo suficientemente fácil y explota el hecho de que las estructuras se almacenan como un bloque contiguo en la memoria. Sin embargo, no esperaría que esto funcione con estructuras de datos intrincadas o indicadores, sino algo para pensar.
Esta es una estrategia de serialización antigua y extremadamente pobre que fallará espectacularmente bajo cualquier cantidad de condiciones, tales como: Diferentes indicadores de compilación, diferentes versiones de compiladores, diferentes CPU (¡ni siquiera arquitecturas necesariamente diferentes!), Diferentes sistemas operativos ... –
algo que automáticamente podría serializar todos los miembros de una clase
Esto no es posible en C++. Python, C#, Java et al. use introspección en tiempo de ejecución para lograr esto. No se puede hacer eso en C++, RTTI no es lo suficientemente potente.
En esencia, no hay nada en el lenguaje C++ que permita a alguien descubrir las variables miembro de un objeto en tiempo de ejecución. Sin eso, no puedes serializarlos automáticamente.
- 1. Python Decapado ranuras de error
- 2. error de decapado en python?
- 3. Error de decapado por multiproceso de Python
- 4. Decapado de varios subprocesos en Python
- 5. decapado con Gracia-degradantes en Python
- 6. Decapado de un método independiente en Python 3
- 7. iteradores de estilo de Python en C
- 8. Python: decapado de objetos altamente recursivos sin usar `setcursionlimit`
- 9. Simulando C-estilo para los bucles en Python
- 10. Guía de estilo para C#?
- 11. ¿Estilo de codificación común para Python?
- 12. Decapado de un gráfico con ciclos
- 13. Comprobador de estilo de codificación para C
- 14. de estilo Python división de enteros y módulo en C
- 15. Herramienta para encontrar moldes de estilo C
- 16. ¿Hay un comprobador de estilo para C++?
- 17. matrices de estilo NumPy para C++?
- 18. Decapado de una definición de clase
- 19. ¿El proceso de decapado es determinista?
- 20. convirtiendo cadena de estilo c a cadena de estilo C++
- 21. Python estilo de comparaciones múltiples?
- 22. Decapado de una enumeración expuesta por Boost.Python
- 23. Python para de C++
- 24. ¿Por qué obtengo un comportamiento inesperado en Python después de la decapado?
- 25. Python decapado después de cambiar el directorio de un módulo de
- 26. Vim y PEP 8 - Código Guía de Estilo para Python
- 27. Python para olfatear combinación de teclas estilo Autohotkey, ¿automatización?
- 28. Herramienta para aplicar estilo/estándares de código python
- 29. Cambiando los comentarios del estilo C++ al estilo C
- 30. Guía de estilo de Google Python
Como dice Jacob a continuación, me preguntaba si alguien había visto una herramienta en tiempo de compilación que podría resolver este problema. Supongo que no hay nada como eso por ahí. –
@RoniChoudhury A menos que me equivoque, la serialización de Boost hace un buen trabajo debido a las limitaciones del lenguaje. – Marcin
@Marcin - Boost.Serialize realmente hace un buen trabajo, pero tiene que escribir una función 'serialize()' que conoce los detalles del objeto que desea serializar. – Ferruccio