reinterpret_cast vector de clase derivada a vector de clase base
Tengo una clase de terceros, digamos, claseA
, y una función que acepta el vector de claseA
del mismo tercero, digamosf3()
(Ver programa simplificado a continuación).
Para un uso más fácil deA
, Creé una clase derivadaB
. Muchas partes de mi programa usaban claseB
.
La pregunta es, ¿cómo puedo llamar?f3()
con un vector deB
como argumento? Es un casting forzado en el argumento def3()
¿Te gusta el programa a continuación, una buena práctica?
#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;
}
Tenga en cuenta que, por compatibilidad, a propósito hago claseB
no tener más variables que la claseA
, cuandoB
hereda deA
. Sin embargo, claseB
tiene más métodos queA
.
¿Garantizará quesizeof(A)
es lo mismo quesizeof(B)
, para que nuestro elenco de vectores funcione?
Estoy trabajando en C ++ 03