automatycznie konwertuje listę wskaźników na klasę pochodną do listy wskaźników do klasy bazowej

Powiedzmy, że mam klasę bazową i pochodną oraz funkcję, która pobiera wektor stl wskaźników do klasy bazowej:

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

czy istnieje sposób na przekazanie listy wskaźników do klasy pochodnej? to znaczy:

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

Powyższe spowoduje następujący błąd kompilatora:

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

Nawet jeśli B * jest wymienialny na A *.

Wreszcie, czy istnieje rozwiązanie dla prostych wskaźników, czy będzie ono również działać ze zwiększonymi wskaźnikami współdzielonymi?

questionAnswers(4)

yourAnswerToTheQuestion