如何获取成员函数的返回值的迭代器?
问题描述:
class A
{
public:
const B& GetB() const;
};
vector<A> manyA;
template<typename ConstBIter>
void foo(ConstBIter beginB, ConstBIter endB);
什么是最优雅的方式来获取存储在A中的迭代器。可以获取指针,将它们存储在数组中,并使用boost :: indirect_iterator。但是肯定有更好的办法?如何获取成员函数的返回值的迭代器?
答
写你自己的迭代器类。在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
http://www.boost.org/doc/libs/1_60_0/libs/iterator/doc/transform_iterator.html –