Как и многие люди, в эти дни я пытаюсь использовать разные функции, которые приносит C + 11. Одним из моих фаворитов является "диапазон для циклов".
Я понимаю, что:
for(Type& v : a) { ... }
Является эквивалентным:
for(auto iv = begin(a); iv != end(a); ++iv)
{
Type& v = *iv;
...
}
И что begin() просто возвращает a.begin() для стандартных контейнеров.
Но что, если я хочу сделать свой собственный тип "range-based for loop" -aware?
Должен ли я просто специализировать begin() и end()?
Если мой пользовательский тип принадлежит пространству имен xml, я должен определить xml::begin() или std::begin()?
Короче говоря, каковы рекомендации для этого?