Estoy desarrollando una aplicación C++ utilizada para simular un escenario del mundo real. En base a esta simulación, nuestro equipo desarrollará, probará y evaluará diferentes algoritmos que funcionan dentro de un escenario de mundo real.Configuración de aplicación flexible en C++
Necesitamos la posibilidad de definir varios escenarios (pueden diferir en unos pocos parámetros, pero un escenario futuro también podría requerir la creación de objetos de nuevas clases) y la posibilidad de mantener un conjunto de algoritmos (que es, de nuevo, un conjunto de parámetros, sino también la definición de las clases que se crearán). Los parámetros se pasan a las clases en el constructor.
Me pregunto cuál es la mejor forma de administrar todas las configuraciones de escenarios y algoritmos. Debería ser posible que un desarrollador trabaje en un escenario con "su" algoritmo y otro desarrollador trabajando en otro escenario con "su" algoritmo diferente. Aún así, los conjuntos de parámetros pueden ser enormes y deben ser "compartibles" (si definí un conjunto de parámetros para un determinado algoritmo en el Escenario A, debería ser posible usar el algoritmo en el Escenario B sin copiar & pegar).
Parece que hay dos formas principales para llevar a cabo mi tarea:
definir un formato de archivo de configuración que puede manejar mis necesidades. Este formato puede estar basado en XML o personalizado. Como no hay reflejo de C# en C++, parece que tengo que actualizar el analizador de archivos de configuración cada vez que se agrega una nueva clase de algoritmo al proyecto (para convertir una cadena como "MyClass" en una nueva instancia de MyClass) Podría crear un nombre para cada configuración y pasar este nombre como argumento de línea de comando.
- Las ventajas son: no compilación necesario para cambiar un parámetro y volver a ejecutar, que puede almacenar fácilmente todo el archivo de configuración con la simulación resultados
- Contra: parece como un montón de esfuerzo, especialmente duro porque estoy usando muchas clases de plantillas que tienen que crearse una instancia con argumentos de plantilla dados. No hay soporte IDE para escribir el archivo (por lo menos sin crear todo un XSD, que tendría que actualizar cada vez que se añade un parámetro/clase)
alambre todo para arriba en código C++. No estoy completamente seguro de cómo haría esto para separar toda la lógica de creación diferente, pero aún así poder reutilizar los parámetros en todos los escenarios. Creo que también trataría de darle a cada configuración un nombre (cadena) y usar este nombre para seleccionar la configuración a través de la línea de comando arg.
- Pro: la seguridad de tipos, soporte IDE, sin analizador necesario
- con: (¿tal vez algo de serialización) ¿cómo puedo almacenar fácilmente la configuración con los resultados ?, necesita compilación después de cada cambio de parámetro
Ahora aquí están mis preguntas: - ¿Cuál es su opinión? ¿Extrañé pros/contras importantes? - ¿Perdí una tercera opción? - ¿Existe una manera simple de implementar el enfoque de archivo de configuración que le da a suficiente flexibilidad? - ¿Cómo organizarías todo el código de fábrica en el segundo enfoque? ¿Hay algún buen ejemplo de C++ para algo como esto?
¡Muchas gracias!
Gracias, Steve. No he visto esto antes y parece bastante bueno tener parámetros en los archivos de configuración, pero todavía parece mucho trabajo conseguir mis argumentos de plantilla en ... – Philipp