顺便说一句:这个例子行不通。检查对象时类型设置不正确。
伪代码:
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])
我不明白为什么这样不行。
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