reinterpret_cast вектор производного класса к вектору базового класса

У меня есть сторонний класс, скажем, классAи функция, принимающая вектор классаA от той же третьей стороны, скажемf3() (См. Упрощенную программу ниже).

Для более легкого использованияAЯ создал производный классB, Многие части моей программы использовали классB.

Вопрос в том, как я могу позвонитьf3() с векторомB как его аргумент? Это принудительное приведение в аргументf3() Понравилась программа ниже хорошей практики?

#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;
}

Обратите внимание, что для совместимости я специально делаю классB иметь не больше переменных, чем классA, когдаB наследует отA, Тем не менее, классB есть больше методов, чемA.

Будет ли это гарантировать, чтоsizeof(A) такой же какsizeof(B), так что наш состав вектора будет работать?

Я работаю на C ++ 03

Ответы на вопрос(1)

Ваш ответ на вопрос