c – 如何在我的课程中允许范围循环?

参见英文答案 > 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),以便可以通过参数依赖查找找到它们.

相关文章

/** C+⬑ * 默认成员函数 原来C++类中,有6个默认成员函数: 构造函数 析构函数 拷贝...
#pragma once // 1. 设计一个不能被拷贝的类/* 解析:拷贝只会放生在两个场景中:拷贝构造函数以及赋值运...
C类型转换 C语言:显式和隐式类型转换 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译...
//异常的概念/*抛出异常后必须要捕获,否则终止程序(到最外层后会交给main管理,main的行为就是终止) try...
#pragma once /*Smart pointer 智能指针;灵巧指针 智能指针三大件//1.RAII//2.像指针一样使用//3.拷贝问...
目录&lt;future&gt;future模板类成员函数:promise类promise的使用例程:packaged_task模板类例程...