Примечание: Это сообщение представляет Вопрос № 2 моего запроса. Вводный блок (весь текст до тех пор, пока не будут достигнуты цифры) повторяется в обоих вопросах, поскольку для ответа на вопрос может потребоваться дополнительная информация.
Введение в вопрос
У меня есть неуправляемая библиотека C ++, которая содержит классы и функции, которые являются общими для нескольких библиотек «более высокого уровня» и совместно используются ими. Теперь мне нужно предоставить доступ к общей библиотеке для приложений C # / .Net. Для этого мне придется обернуть общую библиотеку классами-обертками C ++ / CLI.
Классы, содержащиеся в общей библиотеке, могут быть сложными классами, содержащими вложенные определения классов и переменные-члены, которые являются коллекциями других объектов классов. Переменные коллекции - это экземпляры typedef пользовательского класса списка для управления коллекцией. Общая библиотека также включает в себя классы, которые представляют синтаксическую структуру синтаксиса нестандартного файла сценария, созданного с использованием FLEX / BISON. Общая библиотека и библиотеки «более высокого уровня» написаны таким образом, который допускает кросс-платформенную (Linux и GCC) компиляцию и использование. Любые изменения, которые я делаю, должны допускать это.
Классы-оболочки C ++ / CLI сначала должны иметь только возможность чтения. Но по мере продвижения проекта мне в конечном итоге понадобится создавать и изменять объекты.
Я знаю C ++ / CLI и создал несколько оболочек для других неуправляемых проектов C / C ++, а также предоставляю абстрактные функциональные возможности для этой же общей библиотеки. Так что у меня уже есть основы (и некоторые дополнительные знания).
У меня есть два вопроса, связанных с выполнением этой задачи, и, поскольку они оба могли порождать свои собственные обсуждения и решения, я разделяю свои вопросы на отдельные посты. Я включу ссылку на другой вопрос в каждом сообщении.
Актуальные вопросы
Упаковка неуправляемой библиотеки классов C ++ с C ++ / CLI - Вопрос 1 - Организация проекта / кода
Как эффективно обернуть / обработать переменные коллекции в неуправляемых классах?
Объекты коллекции - это typedefs пользовательского класса списка шаблонов (CObjectList<T>
), написанные для управления управлением коллекцией указателей объектов. Класс коллекции обеспечивает все основные функциональные возможности коллекции, а также управление указателями и очистку / освобождение объектов при деконструкции. Так что для CWidget
в коде будет typedef CObjectList<CWidget> CWidgetList;
.
Большинство классов, используемых в параметре шаблона кода и класса коллекции, являются самим классом. Но в некоторых случаях коллекция относится к базовому классу. Это происходит в разобранной структуре для синтаксического анализатора FLEX / BISON. Например, существует класс CCommand
, от которого наследуются все остальные доступные команды. Так что будет CSetCommand
, CPrintCommand
, CIfCommand
и т. Д.
Я думаю, чтобы сделать это, мне нужно будет создать класс-оболочку моей коллекции, которая будет поддерживать отдельные списки для неуправляемых классов и классов C ++ / CLI. Внутренний объект коллекции будет управлять неуправляемым объектом, и для хранения класса-обертки для элемента должен быть управляемый объект коллекции / списка.
Есть ли у кого-нибудь примеры / предложения, как это сделать? Или как написать универсальный класс, который может принимать как неуправляемые, так и типы классов C ++ / CLI в качестве параметров?