2012-04-16 104 views
6

我有一個std::multimap,我想從equal_range創建一個boost::iterator_range。我發現在文檔中做的沒有簡單的方法,所以我嘗試了以下內容:將std :: iterator對轉換爲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 2016-05-27 04:35:31

回答

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_begin帶你到boost::begin。在看看begin.hpp我們看到(在其他巫術):

​​

而對於一個例子,如何類型可以「改編」爲範圍看看here(他們使用pair爲例)。

相關問題