Ajuste de una biblioteca de clases de C ++ no administrada con C ++ / CLI - Pregunta 2 - Colecciones

Nota: Esta publicación representa la Pregunta # 2 de mi consulta. El bloque de introducción (todo el texto hasta que se alcanzan los números) se repite en ambas preguntas, ya que es información de fondo que puede ser necesaria para responder la pregunta.

Introducción a la pregunta

Tengo una biblioteca de C ++ no administrada que contiene clases y funciones que son comunes y compartidas entre varias bibliotecas de "nivel superior". Ahora tengo que proporcionar acceso a la biblioteca común a aplicaciones C # /. Net. Para hacer esto, tendré que envolver la biblioteca común con clases de envoltura C ++ / CLI.

Las clases contenidas en la biblioteca común pueden ser clases complejas que contienen definiciones de clase anidadas y variables miembro que son colecciones de otros objetos de clase. Las variables de la colección son instancias de typedefs de una clase de lista personalizada para administrar la colección. La biblioteca común también incluye clases que representan la estructura analizada de una sintaxis de archivo de script personalizada creada con FLEX / BISON. La biblioteca común y las bibliotecas de "nivel superior" están escritas de una manera que permite la compilación y el uso multiplataforma (Linux y GCC). Cualquier cambio que haga debe permitir esto.

Las clases de contenedor C ++ / CLI al principio solo necesitan capacidad de lectura. Pero a medida que avanza el proyecto, eventualmente necesitaré poder crear y modificar los objetos también.

Conozco C ++ / CLI y he creado varios contenedores para otros proyectos C / C ++ no administrados, además de proporcionar funcionalidad abstracta a esta misma biblioteca común. Así que ya tengo lo básico (y algunos conocimientos avanzados).

Tengo dos preguntas relacionadas con la realización de esta tarea y dado que ambas podrían generar sus propios debates y soluciones, estoy dividiendo mis preguntas en publicaciones separadas. Incluiré el enlace a la otra pregunta en cada publicación.

Preguntas reales

Ajuste de una biblioteca de clases de C ++ no administrada con C ++ / CLI - Pregunta 1 - Organización del proyecto / código

¿Cómo empaqueto / manejo eficientemente las variables de colección en las clases no administradas?

Los objetos de colección son typedefs de una clase de lista de plantilla personalizada (CObjectList<T>) escrito para gestionar la gestión de una colección de punteros de objetos. La clase de colección proporciona toda la funcionalidad básica de la colección, así como la gestión del puntero y la limpieza / liberación de los objetos en la deconstrucción. Entonces paraCWidget habría untypedef CObjectList<CWidget> CWidgetList; en el código

La mayoría de las clases utilizadas en el código y el parámetro de plantilla de clase de colección son la clase misma. Pero en algunos casos la colección es de una clase base. Esto ocurre en la estructura analizada para el script personalizado FLEX / BISON parser. Por ejemplo, hay unCCommand clase de la que heredan todos los demás comandos disponibles. Entonces habríaCSetCommand, CPrintCommand, CIfCommandetc.

Creo que para hacer esto, tendré que crear mi clase de contenedor de colección que mantenga listas separadas para las clases no administradas y C ++ / CLI. El objeto de colección interno administrará el objeto no administrado, y tendrá que haber un objeto de colección / lista administrado para almacenar la clase de contenedor para el artículo.

¿Hay alguien que tenga algún ejemplo / sugerencia de cómo hacer esto? ¿O cómo escribir una clase genérica que pueda tomar los tipos de clase no administrada y C ++ / CLI como parámetros?

Respuestas a la pregunta(2)

Su respuesta a la pregunta