2014-02-10 30 views
2

我正在寫一個簡單的模板,它將值存儲在數組中,檢查沒有重複。模板C++一次性重載多個運算符

我重載[]運算符,以便它可以用來就像一個普通的數組:

T operator [] (int index) { return _array[index]; } 

但是,如果我想直接更改值不工作,我當然可以寫一些changeVal(INT索引,T值)函數,但如果我可以使用=運算符來完成它,那將更有趣。我可以一次超載多個操作員嗎?像:

operator [] = (int index, T val) { _array[index] = val; } 

這不爲我編譯:有沒有辦法實現這一目標?

顯然我是唯一一個想到這個問題的人,或者答案只是隱藏在一些像「重載操作員問題」這樣的通用句子的數百萬個問題中,但我不會花我的整個生命瀏覽那些(已經做得更老了)。

非常感謝大家,祝你有美好的一天!

編輯:(見下面的評論) 即使我的主要問題得到解決,主要問題的答案 - 是否可能以及如何(即使有一些技巧或任何)仍然會被讚賞 - 這將是質量信息當然 !!!感謝大家 !!!

+1

[OT]:請注意,如果你可能通過'operator []'改變值,你可能會破壞你的唯一性... – Jarod42

+0

非常好的一點!!!我把這個檢查放在一個add(T e)函數中,但是如果你說如果我用[]來改變一個值,它可能也需要檢查...所以最後我還是需要以某種方式重載[]和=一次,或檢測到[]重載是用來更改值...有沒有人有一個想法如何做到這一點? –

+1

'operator []'需要用'operator ='返回一個* Proxy *,並隱式轉換爲'const T'。 – Jarod42

回答

4

如果你希望能夠改變參數值,你需要返回一個參考:

T& operator [] (int index) { return _array[index]; } 

這是習慣,以提供一個const版本的運營商也:

const T& operator [] (int index) const { return _array[index]; } 

這使您const訪問const實例的元素。

+0

愚蠢的我......感謝超快速的回覆(發佈後不到一分鐘)!!! –