我有这样的事情:呼叫功能
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();
}
问题是,并非此向量中的所有元素都有tick()
方法,但我仍然希望将它们放在同一个向量中,因为我还希望能够遍历向量并在所有元素上调用draw()
。有什么方法可以解决这个问题吗?我正在考虑有另一个载体,但我宁愿不要。
尝试'dynamic_cast'实现'tick'方法的类型?或者,在基类中有一个虚拟实现,对于没有实现该方法的类型不做任何事情...... – Nim
不,不要做这些事情之一。如果你有一个只有其中一些对象实现你想要调用的函数的对象向量,那么它们应该在多个集合中。创建_make sense_的接口,并且只有在__ sense_时才从它们派生。 –
这是非常好奇的语句'vector [i] - > tick();' – 2012-12-11 13:36:59