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