我有这样的东西:
class A {
void add (A* a) {
//add a to a vector<A*>
}
virtual void draw() = 0;
}
class B : public A {
void tick() {}
void draw() {}
}
class C : public A {
void draw() {}
}
现在我想做的是有一个像这样的循环:
for(int i=0; i<vector.size(); i++) {
vector[i]->tick();
}
问题是并不是这个 vector 中的所有元素都有 tick()
方法,但我仍然希望将它们放在同一个 vector 中,因为我也希望能够遍历 vector 并在所有元素上调用 draw()
。有办法解决这个问题吗?我正在考虑使用另一个 vector ,但我不想这样做。
最佳答案
如果您有一个 vector
小部件,但只有其中一些小部件带有标志符号,它们真的都是小部件吗?
在您的情况下,您有一个 vector
不同的事物。这是你的问题。当然,您可以想出一些古怪、复杂的机制,将战舰放入铅笔杯中。或者你可以做我认为是正确的事情之一:
- 确保你放入铅笔杯的所有东西都是铅笔
- 创建其他地方放置战舰。
正如您已经提到的,上面的第 2 条是创建一个单独的 vector 。数字 1 可能就像在基类上提供一个带有空(平凡)实现的 virtual tick()
方法一样简单。
关于c++ - 在包含不同子类的 vector 中的某些对象上调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13821523/