我有一个令人沮丧的问题,我不确定如何表达或我做错了什么。
我正在尝试维护boost shared_pointers引用的复杂结构的集合。 这些结构由常规C ++模块创建。我想用某种现有的容器类来做这件事。所以字典(本来很好......)和数组和List都是因为它们无法处理非托管结构。这留下了像vector这样的东西,但我似乎无法在C ++ CLI中使用它。 (我可以找到它,但是向量会在构建过程中抱怨更多内容。
我只是想知道其他人是如何做到这一点的。提升清单是更好的选择吗?理想情况下,我想将字符串名称与结构相关联,我想避免任何内存管理,但简单的解决方案是避免使用。
好的,我想我知道问题是什么。这不会起作用:
vector<boost::shared_ptr<QuantLib::YieldTermStructure>> Curves;
因为它是一个抽象类,而矢量无法处理它。我想自动调整大小需要访问我可能没有的构造函数/析构函数/副本。没有免费的午餐。
这样的事情更糟糕:
Dictionary<String^, boost::shared_ptr<QuantLib::YieldTermStructure> >^ dictCurves;
由于托管句柄的东西不能处理指针。 [我愿意承认我在这里可能有些不对劲。如果结构如此脆弱,那么我要么深入了解如何复制/复制它们,或者有一个更精细的处理机制(链表或其他)。]
答案 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