2016-01-13 73 views
0
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 –

回答

0

寫你自己的迭代器類。在C++中,您不僅僅限於使用標準C++庫中定義的迭代器類。

如果您的類滿足C++標準中定義的迭代器的要求,那麼可以在任何可以使用符合相同要求的其他迭代器的任何地方與C++庫一起使用它。

許多大型軟件庫,實際上,聲明和定義自己的迭代器,爲自己的特殊用途。

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)); 
+0

您可以接受你自己的答案,表示這個問題的問題已經解決了。這是SO的常見做法。 – iksemyonov

相關問題