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

时间:2014-05-22 02:44:19

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

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

我正在尝试维护boost shared_pointers引用的复杂结构的集合。 这些结构由常规C ++模块创建。我想用某种现有的容器类来做这件事。所以字典(本来很好......)和数组和List都是因为它们无法处理非托管结构。这留下了像vector这样的东西,但我似乎无法在C ++ CLI中使用它。 (我可以找到它,但是向量会在构建过程中抱怨更多内容。

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

好的,我想我知道问题是什么。这不会起作用:

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

因为它是一个抽象类,而矢量无法处理它。我想自动调整大小需要访问我可能没有的构造函数/析构函数/副本。没有免费的午餐。

这样的事情更糟糕:

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

由于托管句柄的东西不能处理指针。 [我愿意承认我在这里可能有些不对劲。如果结构如此脆弱,那么我要么深入了解如何复制/复制它们,或者有一个更精细的处理机制(链表或其他)。]

1 个答案:

答案 0 :(得分:1)

Boost指针容器可能适用于您的情况。

对于指针向量:

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