2013-06-19 45 views
1

假设像遍历复杂的内部容器

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

ANonTrivialContainer的迭代器的一类是双向的。从外面,我想用酒吧的内容做东西。什么是prefferable的

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

回答

1

我将提供一个​​通用方法的对象的引用,以一个仿函数作为参数。

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