Cup*_*ppM 6 .net collections c++-cli wrapper visual-c++
注意:这篇文章代表我的询问问题#2.在两个问题中重复引入块(直到达到数字的所有文本),因为它是回答问题可能需要的背景信息.
我有一个非托管C++库,它包含几个"更高级别"库之间共享和共享的类和函数.我现在需要提供对C#/ .Net应用程序的公共库的访问.为此,我将使用C++/CLI包装类包装公共库.
公共库中包含的类可以是包含嵌套类定义和成员变量的复杂类,这些变量是其他类对象的集合.集合变量是用于管理集合的自定义列表类的typedef的实例.公共库还包括表示使用FLEX/BISON创建的自定义脚本文件语法的已解析结构的类.公共库和"更高级别"库都是以允许跨平台(Linux和GCC)编译和使用的方式编写的.我所做的任何改变都必须允许这样做.
C++/CLI包装器类首先只需要读取功能.但随着项目的进展,我最终还需要能够创建和修改对象.
我了解C++/CLI并为其他非托管C/C++项目创建了几个包装器,并为这个公共库提供了抽象功能.所以我已经掌握了基础知识(以及一些高级知识).
我有两个与执行此任务相关的问题,因为他们可以产生自己的讨论和解决方案,我将我的问题分成不同的帖子.我将在每篇文章中包含指向其他问题的链接.
如何在非托管类中有效地包装/处理集合变量?
集合对象是自定义模板列表class(CObjectList<T>)的typedef,用于处理对象指针集合的管理.集合类提供所有基本集合功能以及指针管理和解构时对象的清理/释放.因此,代码中CWidget会有一个typedef CObjectList<CWidget> CWidgetList;.
代码和集合类模板参数中使用的大多数类都是类本身.但在某些情况下,该集合属于基类.这发生在自定义脚本FLEX/BISON解析器的已解析结构中.例如,有一个CCommand类可以继承所有其他可用命令.所以会有CSetCommand,CPrintCommand,CIfCommand,等.
我想为了做到这一点,我将不得不创建我的集合包装类,它维护非托管和C++/CLI类的单独列表.内部集合对象将管理非托管对象,并且必须有托管集合/列表对象来存储项目的包装类.
有没有人有任何关于如何做到这一点的例子/建议?或者如何编写可以将非托管类和C++/CLI类类型作为参数的泛型类?
这是一个很难回答的问题,但我建议您有一个编组/转换层,可以将托管集合转换为非托管集合。让你的库保持原样,只需转换参数并返回即可。
这就是我会做的如果
由于这些原因
这将是我的默认方法,除非我确实需要访问数据结构中库的功能(它不仅仅是组织的数据 - 而是数据和行为)
| 归档时间: |
|
| 查看次数: |
2011 次 |
| 最近记录: |