c# - 无法在 C++ CLI 中维护指针集合

标签 c# c++ boost collections c++-cli

我有一个令人沮丧的问题,我不确定如何表达或我做错了什么。

我正在尝试维护由 boost shared_pointers 引用的复杂结构的集合。 这些结构是由常规 C++ 模块创建的。我想用某种现有的容器类来做到这一点。所以 Dictionary(本来不错....)和 array 和 List 都出局了,因为它们无法处理非托管结构。这留下了类似 vector 的东西,但我似乎无法让它在 C++ CLI 中工作。 (我可以找到它,但是 vector 在构建过程中提示一些更进一步的东西。

我只是想知道其他人是如何做到这一点的。 boost 列表是更好的选择吗?理想情况下,我想将字符串名称与结构相关联,并且我想避免任何内存管理,但简单的解决方案是避免我。

好的,我想我知道问题是什么。这行不通:

vector<boost::shared_ptr<QuantLib::YieldTermStructure>> Curves;

因为是抽象类,vector处理不了。我想自动调整大小需要访问我可能没有的构造函数/析构函数/拷贝。天下没有免费的午餐。

这样的事情更糟:

Dictionary<String^, boost::shared_ptr<QuantLib::YieldTermStructure> >^ dictCurves;

由于托管句柄无法处理指针。 [我愿意承认我可能对这里的某些事情有错误的看法。如果结构如此脆弱,那么我要么需要深入研究如何复制/复制它们,要么需要更精细的处理机制(链表或其他)。]

最佳答案

Boost Pointer Container 可能适用于您的情况。

对于指针 vector :

boost::ptr_vector<QuantLib::YieldTermStructure>;

对于关联的指针容器(在这种情况下,键将是一个字符串):

boost::ptr_multimap<std::string, QuantLib::YieldTermStructure>

容器在您插入对象时获得对象的所有权,因此您无需手动删除对象。

http://www.boost.org/doc/libs/1_57_0/libs/ptr_container/doc/tutorial.html

关于c# - 无法在 C++ CLI 中维护指针集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23796999/

相关文章:

c++ - boost bgl write_graphviz VertexPropertyWriter 和 EdgePropertyWriter

c++ - "cout <<(_1*3)"是什么意思?

C++ Boost 任何尝试

c# - 具有分离条件的休眠分页

c++ - 如何在 C++ 中构建复合 for 循环?

c# - 将 Bootstrap 类应用于 @Html.DropDownList()

c++ - 在 C++ 中创建环境对象的最佳方法

c++ - copy-and-swap成语混淆

c# - 上传文件到共享点服务器

c# - 一个 DLL,具有两个应用程序的两个实现