vetor reinterpret_cast da classe derivada para vetor da classe base

Eu tenho uma classe de terceiros, digamos, classeAe 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

questionAnswers(1)

yourAnswerToTheQuestion