我有一个像这样的动态数组包装器模板:
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 风格 for 循环。
最佳答案
您可以编写自己的自定义迭代器,在取消引用时返回 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
和 end
函数返回此迭代器。
我认为数组包装器的行为有点令人惊讶。
关于c++ - 基于for循环访问范围内的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40029386/