我有一个家长班:
class Parent{
virtual void method1() = 0;
virtual void method2() = 0;
virtual void method3() = 0;
};
还有两个孩子(但需要赚更多):
class Child1: public Parent{
void method1() override;
void method2() override;
void method3() override;
};
class Child2: public Parent{
void method1() override;
void method2() override;
void method3() override;
};
在我的
Controller
班级中,每个班级都有一个 std::vector
:
Class Controller{
private:
std::vector<Child1*> childs1;
std::vector<Child2*> childs2;
}
我希望能够迭代所有子向量的所有元素来调用重写方法,而不必为每个人创建 for 循环。
类似:
std::vector<std::vector<Parent*>> all_vectors =
{
std::vector<Child1*>(childs1.begin(), childs1.end()),
std::vector<Child2*>(childs2.begin(), childs2.end())
}
for(vector<Parent*> v: all_vectors) {
for(Parent* i: v){
i->method1();
i->method2();
i->method3();
}
}
这实际上不起作用,因为它破坏了每个向量的大小。例如,对于
childs1.size() = 4
,它正确迭代前 4 个元素,但尝试访问第五个元素。如果询问 allvectors[0].size()
或 allvectors[1].size()
,它会给出比原始尺寸大得多的尺寸。
还有一个问题,这会创建一堆不需要的副本。
有没有办法创建一个自定义迭代器来遍历
n
向量的所有元素?它的 iterator++
操作以某种方式从 vector<Child1>.end()
跳转到 vector<Child2>.begin()
。
或者还有我在这里没有看到的更好的解决方案吗?
我建议简单地使用一个
std::vector<Parent*>
来保存所有 ChildX*
指针,例如:
std::vector<Parent*> all_childs;
all_childs.insert(all_childs.end(), childs1.begin(), childs1.end());
all_childs.insert(all_childs.end(), childs2.begin(), childs2.end());
...
for(Parent* p: all_childs) {
p->method1();
p->method2();
p->method3();
}