Как и многие люди, в эти дни я пытаюсь использовать разные функции, которые приносит 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()
?
Короче говоря, каковы рекомендации для этого?