Estoy intentando escribir una aplicación que está cargando sus extensiones dinámicamente durante el tiempo de ejecución. Usé la biblioteca Boost Preprocessor para escribir una función de preprocesador que, dada una lista de nombres, declara una clase para cada nombre (y los convierte en subclases de alguna clase AbstractPlugin) y luego declara una secuencia de Boost MPL que contiene esas clases. Luego escribí una clase que intenta un puntero a AbstractPlugin si podría ser lanzado a cualquiera de los tipos en esa secuencia de MPL. El problema aquí es que mi función de preprocesador necesita una lista completa de todas las extensiones que quiero crear y cargar. ¿Hay alguna técnica que me permita registrar cada extensión en un archivo separado?Registre una clase C++ para que luego una función pueda iterar sobre todas las clases registradas
Actualización:
creo, mi explicación de la situación era demasiado vaga, así que decidí hacerlo más específico.
Me gustaría definir una colección de tipos de extensión. Para cada tipo de extensión, puede haber cualquier cantidad de extensiones. Durante el tiempo de ejecución, el programa carga una biblioteca externa, resuelve la función de punto de entrada, la llama y, como resultado, obtiene un puntero. A continuación, intenta convertir ese puntero a todos los tipos de extensión registrados (usando dynamic_cast
, por lo que las clases para los tipos de extensión heredan de alguna clase de base polimórfica). Si un lanzamiento a algún tipo de extensión tiene éxito, el puntero fundido se usa en una llamada al manejador especial para ese tipo de extensión.
El número de tipos de extensión se conoce en tiempo de compilación (mientras que, obviamente, el número de extensiones es infinito). Usando mi enfoque, la clase de cargador usa este conocimiento para verificar si existe un controlador para cada tipo de extensión (si no, el programa no compila). Además, mi enfoque no obliga a las clases porque los tipos de extensión saben algo sobre el cargador (por lo que es fácil modificar el cargador). Pero sería más conveniente si cada tipo de extensión se registrara solo.
¿Está generando un encabezado una solución aceptable? – Arpegius