reinterpret_cast Vektor der abgeleiteten Klasse zum Vektor der Basisklasse

Ich habe eine 3rd-Party-Klasse, sagen wir, KlasseA und eine Funktion, die den Vektor der Klasse @ akzeptieA von demselben Drittanbieter, sagen Sief3() (Siehe vereinfachtes Programm unten).

Zur einfacheren Verwendung vonA, Ich habe eine abgeleitete Klasse erstelltB. Viele Teile meines Programms verwendeten classB.

Die Frage ist, wie kann ich anrufenf3() mit einem Vektor vonB als Argument? Ist ein erzwungenes Casting im Argument vonf3() wie das Programm unten eine gute Praxis?

#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;

// a 3rd-party class
class A
{
public:
    int n;
    void f1();
};

// my class
class B: public A
{
public:
    void f2();
};

// a 3rd-party function
void f3(std::vector<A> &a);

int main()
{
    std::vector<B> y;

    y.push_back(B());
    y.push_back(B());
    y.push_back(B());
    y.push_back(B());

    f3(*(vector<A>*)(&y));  // Is this a good practice?
    cout << y[3].n << endl;
    return 0;
}

Bitte beachten Sie, dass ich aus Kompatibilitätsgründen absichtlich class @ machB um nicht mehr Variablen als Klasse @ zu habA, wannB erbt vonA. ClassB hat mehr Methoden alsA.

Wird es garantieren, dasssizeof(A) ist das gleiche wiesizeof(B), damit unsere Vektorbesetzung funktioniert?

Ich arbeite an C ++ 03

Antworten auf die Frage(2)

Ihre Antwort auf die Frage