我有一个动态数组包装器模板,如下所示:
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风格循环。
答案 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
函数返回此迭代器。
我认为数组包装器的行为有点令人惊讶。