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