vector<Base*>
并且vector<Derived*>
是不相关的类型,所以你不能这样做。这在此处的 C++ 常见问题解答中进行了解释。
您需要将变量从 a 更改vector<Derived*>
为 avector<Base*>
并将Derived
对象插入其中。
此外,为避免vector
不必要地复制,您应该通过 const-reference 传递它,而不是按值传递:
void BaseFoo( const std::vector<Base*>& vec )
{
...
}
最后,为了避免内存泄漏,并使您的代码异常安全,请考虑使用旨在处理堆分配对象的容器,例如:
#include <boost/ptr_container/ptr_vector.hpp>
boost::ptr_vector<Base> vec;
或者,将向量更改为保存智能指针而不是使用原始指针:
#include <memory>
std::vector< std::shared_ptr<Base*> > vec;
或者
#include <boost/shared_ptr.hpp>
std::vector< boost::shared_ptr<Base*> > vec;
在每种情况下,您都需要BaseFoo
相应地修改您的功能。