2016-10-13 144 views
3

我有一個動態數組包裝模板這樣的:訪問指針for循環

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 
} 

,即我要在包裝一系列基於循環授予訪問權限的指針。有沒有辦法做到這一點,而不創建一個指向我的包裝內的指針數組指針?

編輯

達尼在註釋方案,如同已經指出here。我實際上想知道是否有一種方法可以製作下面的語法:

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

作爲循環的C風格上面。

+0

你可以從參考文獻 – Dani

+0

中得到一個指針你的意思是:'for(auto&ref:wrapper){auto ptr = &ref;}'?我可以以某種方式改變'begin()'和'end()'方法來使這個工作隱含起來:'for(auto ptr:wrapper){/ * do smth * /}'? –

回答

1

你可以寫非關聯

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;} 
}; 

時,然後從beginend函數返回該迭代器返回T*自己的自定義迭代器。

我認爲這是有點令人驚訝的行爲,雖然數組包裝。

Live demo

+0

看起來不錯。謝謝。數組包裝僅僅是一個簡單的例子。 –