我有一个动态数组包装模板,类似于这样:
通过循环提供值和引用访问的功能:
我希望能够通过包装器实现基于范围的循环以访问指针。是否有一种方法可以在不创建指向指针的指针数组的情况下实现这一点?
编辑:Dani 在评论中提出的解决方案已经被证明是有效的here。我实际上想知道是否有一种方法可以使用以下语法:
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循环一样工作。
for(auto& ref : wrapper) { auto ptr = &ref; }
?我能否以某种方式修改begin()
和end()
方法,使其在for(auto ptr : wrapper) { /* do smth */ }
中隐式地工作? - Yuri Lifanov