我有一个方法
void foo(list<shared_ptr<Base>>& myList);
我试图用两种不同类型的列表来调用它,一种是 DerivedClass1,一种是 DerivedClass2
list<shared_ptr<DerivedClass1>> myList1;
foo(myList1);
list<shared_ptr<DerivedClass2>> myList2;
foo(myList2);
然而,这显然会产生编译器错误
error: a reference of type "std::list<boost::shared_ptr<Base>, std::allocator<boost::shared_ptr<Base>>> &" (not const-qualified) cannot be initialized with a value of type "std::list<boost::shared_ptr<DerivedClass1>, std::allocator<boost::shared_ptr<DerivedClass1>>>"
有没有简单的方法来投射 shared_ptr 的容器?可以做到这一点的替代容器?
更新:感谢所有回复的人。在语言的范围内工作,保持方法“原样”的最佳方法似乎是使用 shared_ptr 的容器并将其准确传递(在调用站点创建一个新列表)。
我想我几乎已经知道这一点,但我记得阅读过关于处理 shared_ptr 容器的 boost 库的其他部分,并认为它可能已经被其他人更优雅地解决了。然而,从我自己的进一步研究来看,这些似乎更倾向于减少 shared_ptr 的开销,在一些指针被独占拥有的情况下(因此需要每个容器一个锁,而不是容器中的每个对象一个锁)。
再次感谢你们,你们都很棒!