При мультиплексировании вызовов ко многим подобъектам, какой элегантный способ предотвратить циклический шаблонный код?
Описание проблемы на примере:
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