2012-04-16 5 views
6

私はstd::multimapを持っていて、equal_rangeからboost::iterator_rangeを作成したいと思います。私は、ドキュメントでそれを行うための簡単な方法を発見したので、私は次のことを試してみました:イテレータのstd :: pairをboost :: iterator_rangeに変換する

typedef std::multimap<int, std::string> Map; 
Map map; 
... 
boost::iterator_range<Map::iterator> r(map.equal_range(2)); 

驚くべきことに、それは(GCC 4.1.2を使用して)動作します。私はそれがどのように機能するのか不思議です。私はそれを行うiterator_rangeコンストラクタのオーバーロードを見つけず、multimap::iterator_rangeは明らかにBoost範囲を返す過負荷を持っていません。

+1

基本的なイテレータ型をペアから推論する 'boost :: make_iterator_range'もあることに注意してください。 – alfC

答えて

7

iterator_range_core.hpp

//! Constructor from a Range 
template< class Range > 
iterator_range(const Range& r) : 
    m_Begin(impl::adl_begin(r)), m_End(impl::adl_end(r)) 
{} 

impl::adl_beginboost::beginが表示されます。 (他ブードゥー教の中で)私たちが見るbegin.hppを見てみた: ​​

とタイプが範囲に「適応」する方法例えば

は、ルックhereを持っている(彼らは例としてpairを使用します)。

関連する問題