当多路复用对许多子对象的调用时,防止循环样板代码的优雅方法是什么?
问题举例说明:
struct Foo {
void Boo();
void Hoo();
bool IsActivated();
};
struct FooAggregator {
...
void Boo();
void Hoo();
...
std::vector<Foo> m_foos;
};
FooAggregator::Boo() {
for(size_t i=0, e=m_foos.size(); i!=e; ++i) {
if(m_foos[i].IsActivated()) {
m_foos[i].Boo();
}
}
}
FooAggregator::Hoo() {
for(size_t i=0, e=m_foos.size(); i!=e; ++i) {
if(m_foos[i].IsActivated()) {
m_foos[i].Hoo();
}
}
}
如您所见,FooAggregator 实现与单个 Foo 相同(相似)的接口,迭代所有 Foo 对象,调用它们各自的成员函数。
如您所见,迭代循环是完整的样板文件,对 FooAggregator 的每个成员函数重复。
什么是从 FooAggregators 成员函数的实现中删除样板的优雅方法