class A
{
public:
const B& GetB() const;
};
vector<A> manyA;
template<typename ConstBIter>
void foo(ConstBIter beginB, ConstBIter endB);
最优雅的方法是在A中存储B的迭代器。可以获取指针,将它们存储在数组中并使用boost :: indirect_iterator。但肯定有更好的方法吗?
答案 0 :(得分:0)
编写自己的迭代器类。在C ++中,您不仅限于使用标准C ++库中定义的迭代器类。
如果您的类符合C ++标准中定义的迭代器的要求,则可以在任何可以使用满足相同要求的其他迭代器的地方与C ++库一起使用。
事实上,许多大型软件库都是为了自己的特定目的而声明和定义自己的迭代器。
答案 1 :(得分:0)
得到解决方案......
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));