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