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

How to get an iterator over the return values of member function?

本文关键字:函数 返回值 迭代器 成员 何获取 获取      更新时间:2023-10-16
class A
{
   public:
     const B& GetB() const;
};
vector<A> manyA;
template<typename ConstBIter>
void foo(ConstBIter beginB, ConstBIter endB);

在 A 中存储的 B 上获取迭代器的最优雅的方法是什么.可以获取指针,将它们存储在数组中并使用 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));