在我的程序中,我有一个名为Entity的类.另一个类Invader继承实体.由于我想拥有4种不同类型的入侵者,因此我声明了继承自Invader的Invader1,Invader2,Invader3和Invader4类.现在我声明一个Entity指针类型向量来存储所有入侵者,如:
entities.push_back(new Invader4());
entities.push_back(new Invader3());
entities.push_back(new Invader2());
entities.push_back(new Invader1());
entities.push_back(new Invader0());
Run Code Online (Sandbox Code Playgroud)
当我在运行时检查实体中元素的类型时,比如说
typeid(*entities->at(index))
Run Code Online (Sandbox Code Playgroud)
它可能会返回4种入侵者中的一种.在实体中还有其他继承实体的对象.所以我只想检查对象的类型是否是Invader,我不想知道它是Invader1,Invader2等.
我怎么能做到这一点?
在C++中有很多方法可以做到这一点,但基本问题是,一旦你必须开始查询应该是多态的容器中的元素,你可能会放弃使用polimorphism的想法.拥有多态元素集合的全部意义在于,您可以对它们进行相同的处理.所以,如果你有一个,vector<Entity*>你应该只将它的元素视为Entity*s.如果你发现你需要调用一些Invader类似的函数Entity,那么你最好还拿一个容器Invader*(使用与原始容器相同的指针).