自动将指向派生类的指针列表转换为指向基类的指针列表

Ken*_*Ken 2 c++ inheritance stl

让我们说我有一个基类和派生类,以及一个带有指向基类的stl向量的函数:

class A { public: int x; };

class B : public A { };

void foo(const vector<A*> &va) {
    for (vector<A*>::const_iterator it = va.begin(); it < va.end(); it++)
        cout << (*it)->x << endl;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法将指针列表传递给派生类?即:

vector<B*> vb;
// ... add pointers to vb ...
foo(vb);
Run Code Online (Sandbox Code Playgroud)

以上将导致以下编译器错误:

error: could not convert ‘vb’ from ‘std::vector<B*>’ to ‘std::vector<A*>’
Run Code Online (Sandbox Code Playgroud)

即使B*可转换为A*.

最后,如果有一个普通指针的解决方案,它是否也适用于boost共享指针?

Sci*_*ion 5

std::vector<B*> and std::vector<A*>在技​​术上是无关的.C++不允许你想要的东西.

一种方式...为什么不有一个std::vector<Base*>并插入Derived对象?这就是多态性,动态调度等问题.