vetor reinterpret_cast da classe derivada para vetor da classe base
Eu tenho uma classe de terceiros, digamos, classeA
e uma função que aceita o vetor da classeA
do mesmo terceiro, digamosf3()
(Veja programa simplificado abaixo).
Para facilitar o uso deA
, Eu criei uma classe derivadaB
. Muitas partes do meu programa usavam classeB
.
A questão é: como posso ligarf3()
com um vetor deB
como argumento? É um lançamento forçado no argumento def3()
gostou do programa abaixo de uma boa prática?
#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;
}
Observe que, por compatibilidade, propositalmente faço aulaB
ter mais variáveis que classeA
, quandoB
herda deA
. No entanto, ClasseB
tem mais métodos queA
.
Isso garantirá quesizeof(A)
é o mesmo quesizeof(B)
, para que nosso elenco de vetores funcione?
Eu estou trabalhando em C ++ 03