Одиночный итератор и range-based for
От: flаt  
Дата: 24.09.14 13:07
Оценка:
Не уверен насчёт корректности названия, но я о таких:

A default constructed iterator represents the end of the list.


Какие есть варианты по скрещиванию?

Вижу заворачивание пары в промежуточный объект:

template<class Iterator>
using iterators_pair = std::pair<Iterator, Iterator>;

namespace std {
  template<class Iterator>
  Iterator begin(const std::pair<Iterator, Iterator>& range) { return range.first; }

  template<class Iterator>
  Iterator   end(const std::pair<Iterator, Iterator>& range) { return range.second; }
}

template<class Iterator>
std::pair<Iterator, Iterator> as_range(Iterator first)   { return std::make_pair(first, Iterator()); }

int main()
{
  using boost::asio::ip::tcp::resolver;
  resolver dns(...);
  for( auto& result: as_range(dns.resolve(...)) ) {
    // use result
  }
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.