[C++] Почему был удален доступ к парам из C ++ 11?


Answers

Вы можете использовать boost::make_iterator_range . Он создает iterator_range с помощью методов begin() и end() . boost::make_iterator_range может принимать std::pair итераторов.

Question

Я только что обнаружил, что в какой-то момент проект C ++ 11 имел std::begin / std::end перегрузки для std::pair что позволило обрабатывать пару итераторов как диапазон, подходящий для использования в цикле на основе диапазона (N3126, раздел 20.3.5.5), но с тех пор оно было удалено.

Кто-нибудь знает, почему он был удален?

Я считаю, что удаление очень неудачное, потому что, похоже, нет другого способа рассматривать пару итераторов как диапазон. В самом деле:

  • Правила поиска для начала / конца в цикле, основанном на диапазоне, говорят, что начало / конец рассматриваются в 1) как функции-члены объекта диапазона 2) как свободные функции в «связанных пространствах имен»,
  • std::pair не имеет функций начала / конца
  • Единственным связанным пространством имен для std::pair<T, U> в общем случае является пространство имен std
  • Нам не разрешено перегружать std::begin / std::end для std::pair
  • Мы не можем специализировать std::begin / std::end для std::pair (потому что специализация должна быть частичной, и это не допускается для функций)

Есть ли другой способ, который мне не хватает?




Links