如何获取成员函数的返回值的迭代器?

问题描述:

class A 
{ 
    public: 
    const B& GetB() const; 
}; 

vector<A> manyA; 

template<typename ConstBIter> 
void foo(ConstBIter beginB, ConstBIter endB); 

什么是最优雅的方式来获取存储在A中的迭代器。可以获取指针,将它们存储在数组中,并使用boost :: indirect_iterator。但是肯定有更好的办法?如何获取成员函数的返回值的迭代器?

+0

http://www.boost.org/doc/libs/1_60_0/libs/iterator/doc/transform_iterator.html –

写你自己的迭代器类。在C++中,您不仅仅限于使用标准C++库中定义的迭代器类。

如果您的类满足C++标准中定义的迭代器的要求,那么可以在任何可以使用符合相同要求的其他迭代器的任何地方与C++库一起使用它。

许多大型软件库,实际上,声明和定义自己的迭代器,为自己的特殊用途。

得到了解决......

typedef boost::transform_iterator<boost::function<B&(A&)>, vector<A>::iterator> BIter; 

BIter beginBIter(manyA.begin(), boost::mem_fn(&Layer::GetB)); 
BIter endBIter(manyA.end(), boost::mem_fn(&Layer::GetB)); 
+0

您可以接受你自己的答案,表示这个问题的问题已经解决了。这是SO的常见做法。 – iksemyonov