converter automaticamente lista de ponteiros para classe derivada para lista de ponteiros para a classe base

Vamos dizer que eu tenho uma classe base e derivada, e uma função que leva um vetor stl de ponteiros para a classe base:

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;
}

Existe alguma maneira de passar uma lista de ponteiros para a classe derivada? ie:

vector<B*> vb;
// ... add pointers to vb ...
foo(vb);

O acima causará o seguinte erro do compilador:

error: could not convert ‘vb’ from ‘std::vector<B*>’ to ‘std::vector<A*>’

Mesmo que B * seja conversível em A *.

Por fim, se houver uma solução para ponteiros simples, ela funcionará com os ponteiros compartilhados de aprimoramento também?

questionAnswers(4)

yourAnswerToTheQuestion