Я пытаюсь добавить различные типы объектов в массив, и я хочу получить тип производного класса до приведения.Есть ли хорошее решение?
Кстати: этот пример не работает.Тип не установлен правильно, когда я проверяю объекты.
псевдокод:
enum Fruit {
APPLE = 0,
BANANA = 1
}
class Fruit {
public:
int type;
}
class Apple : Fruit {
...
}
class Banana : Fruit {
...
}
Apple *apple = new Apple();
apple->type = APPLE;
vector<Fruit*> fruits;
fruits.push_back(apple);
if(fruits[0].type == BANANA) // type always the same ...
static_cast<Banana*>(fruits[0])
** Обновление: **
Я не понимаю, почему это не работает.
Во-первых, тип должен бытьпередан в подкласс и доступен.
Во-вторых, я понимаю, почему первый и последний - 4, но я не понимаю, почему второй тип элементов равен 0 ??
class PolyTest {
public:
int type;
};
class SubA : public PolyTest{
};
class SubB : public PolyTest{
};
std::unique_ptr<SubA> sub = std::make_unique<SubA>();
sub->type = 66;
std::unique_ptr<SubB> subb = std::make_unique<SubB>();
sub->type = 3;
std::vector<PolyTest*> tests;
tests.push_back(sub.get());
tests.push_back(subb.get());
sub->type = 4;
tests.push_back(sub.get());
std::cout << "subtype: " << tests[0]->type << std::endl;
std::cout << "subtype: " << tests[1]->type << std::endl;
std::cout << "subtype: " << tests[2]->type << std::endl;
Возвращает:
subtype: 4
subtype: 0
subtype: 4