我有这样一个类:
class Foo {
private:
int a,b,c,d;
char bar;
double m,n
public:
//constructors here
};
我想在我的类(class)中允许 range-for 循环,例如
Foo foo {/*...*/};
for(auto& f : foo) {
//f will be a specific order such as c,b,d,(int)m,(int)bar,a,(int)n
}
我怎样才能做到这一点?我正在查看迭代器,但不知道范围循环的要求是什么。 (请不要让我使用数组或STL类型)
循环定义为等同于:
for ( auto __begin = <begin-expr>,
__end = <end-expr>;
__begin != __end;
++__begin ) {
auto& f = *__begin;
// loop body
}
哪里<begin-expr>
是foo.begin()
, 或 begin(foo)
如果没有合适的成员函数,同样适用于 <end-expr>
. (这是对 C++11 6.5.4 规范的简化,适用于范围是类类型的左值的这种特殊情况)。
所以需要定义一个支持预自增的迭代器类型++it
, 取消引用 *it
与比较i1 != i2
;或者
- 给
foo
公共(public)成员函数 begin()
和 end()
;或
- 定义非成员函数
begin(foo)
和 end(foo)
, 在与 foo
相同的命名空间中以便可以通过依赖于参数的查找找到它们。