参见英文答案 >
How to make my custom type to work with “range-based for loops”?7个
我有一个这样的课:
我有一个这样的课:
class Foo { private: int a,b,c,d; char bar; double m,n public: //constructors here };
我想在课堂上允许使用范围循环,例如
Foo foo {/*...*/}; for(auto& f : foo) { //f will be a specific order such as c,d,(int)m,(int)bar,a,(int)n }
我怎样才能做到这一点?我在看迭代器但不知道range-for循环的要求是什么. (请不要让我使用数组或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中规范的简化,对于这种特殊情况,其中范围是类类型的左值).
所以你需要定义一个支持预增量的迭代器类型,取消引用*它和比较i1!= i2;或者
>给foo公共成员函数begin()和end();要么>在与foo相同的命名空间中定义非成员函数begin(foo)和end(foo),以便可以通过参数依赖查找找到它们.
原文地址:https://www.jb51.cc/c/118884.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。