c++ - 如何在我的类(class)允许 range-for 循环?

标签 c++ c++11 iterator

<分区>

我有这样一个类:

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 相同的命名空间中以便可以通过依赖于参数的查找找到它们。

关于c++ - 如何在我的类(class)允许 range-for 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18321092/

相关文章:

Java以降序显示我的文本文件中的单词?

c++ - 通过 map.equal_range 问题 interator

c++ - 任何种子在同一字符串上的CRC32哈希冲突

c++ - "const wchar_t *"类型的值不能用于初始化 "LPCSTR"类型的实体

c++ - C++ 中的函数式编程。实现 f(a)(b)(c)

c++ - 如何通过类型推导过滤可变参数模板包?

c++ - 在 C++ 中将通用构造函数分配给成员变量时的 std::move 或 std::forward

c++ - 如何修复 C++ 中结构的段错误?

c++ - 最小实例化类对象,查询getInstance<T>()时,基于继承

c++ - 从到非标量类型的迭代器错误转换