循环在内部复杂容器上

时间:2013-06-19 09:33:49

标签: c++ iterator containers abstraction

假设像

这样的类
class Foo
    {
    private:
        ANonTrivialContainer bar;
        OtherData baz;
    };

ANonTrivialContainer的迭代器是双向的。从外面看,我想用bar的内容做些什么。什么是可以忍受的

  • 提供beginBar()和相应的endBar(),返回ANonTrivialContainer的迭代器,如Allowing access to container objects in C++的接受答案。这将有效,但会向调用者公开内部细节(因为它需要对底层类进行显式调用)。
  • 提供一个自定义迭代器,将所有调用转发给内部迭代器。 beginBar和endBar现在返回自定义迭代器。
  • 提供一个引用Callback类对象的forEach方法

1 个答案:

答案 0 :(得分:1)

我会提供一个visitBars泛型方法,以函子作为参数。

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