Зацикливание на внутренней сложной емкости

Предположим, что класс

class Foo
{
private:
ANonTrivialContainer bar;
OtherData baz;
};

Итераторы ANonTrivialContainer являются двунаправленными. Снаружи я хочу делать вещи с содержимым бара. Что является предпочтительным из

  • Предоставляя beginBar () и соответствующий endBar (), возвращая итераторы для ANonTrivialContainer как принятый ответ Разрешение доступа к объектам контейнера в C ++. Это будет работать, но предоставляет внутреннюю информацию вызывающей стороне (поскольку она должна делать явные вызовы нижележащему классу).
  • Предоставление пользовательского итератора, который перенаправляет все вызовы на внутренний итератор. beginBar и endBar теперь возвращают пользовательский итератор вместо этого.
  • Предоставление метода forEach, который принимает ссылку на объект класса Callback

1

Решение

Я бы предоставил visitBars универсальный метод, принимая функтор в качестве параметра.

template<typename F> void visitBars(F visit) {
for(auto b: bar)
visit(b);
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector