基于循环访问指针范围

时间:2016-10-13 19:29:05

标签: c++ c++11 for-loop

我有一个动态数组包装器模板,如下所示:

class Wrapper {
  public:
    T* const start;
    T* const end;
    T* begin() const { return start; }
    T* end() const { return end; }
    /*
       more code
    */
};

通过循环提供值和引用访问:

Wrapper<T> wrapper;
for(auto val : wrapper) {
  //do smth to value
}
for(auto& ref : wrapper) {
  //do smth to reference
}

。我现在想要创建一个基于范围的for循环,它等同于:

for(auto ptr = wrapper.start; ptr != wrapper.end; ptr++) {
  //do smth to pointer
}

,即我想要一个基于范围的循环覆盖器来访问指针。有没有办法在我的包装器中创建指针指针数组?

修改

Dani在评论中的解决方案正如已经指出的那样here。我实际上想知道是否有办法制作以下语法:

for(auto ptr : wrapper) {
  //do smth
}

作为上面的C风格循环。

1 个答案:

答案 0 :(得分:1)

您可以编写自己的自定义迭代器,在取消引用时返回foo(...)

T*

然后从class iterator { T* ptr; public: explicit iterator(T* ptr) : ptr(ptr) {} iterator& operator++() {ptr++; return *this;} bool operator!=(iterator other) const {return ptr != other.ptr;} T* operator*() const {return ptr;} }; begin函数返回此迭代器。

我认为数组包装器的行为有点令人惊讶。

Live demo