像许多人一样,这些天我一直在尝试c++ 11带来的不同特性。我最喜欢的是“基于范围的for循环”。
我明白:
for(Type& v : a) { ... }
等价于:
for(auto iv = begin(a); iv != end(a); ++iv)
{
Type& v = *iv;
...
}
而begin()
只是返回标准容器的a.begin()
。
但是如果我想使我的自定义类型“基于范围的for循环”感知呢?
我应该特殊化begin()
和end()
吗?
如果我的自定义类型属于命名空间xml
,我应该定义xml::begin()
还是std::begin()
?
简而言之,这样做的指导方针是什么?