【发布时间】:2016-10-13 19:29:05
【问题描述】:
我有一个像这样的动态数组包装模板:
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 */ }吗?