2012-02-22 68 views
1

我99%肯定這個問題的答案是「沒有骰子」,但我還是想試試數組...重寫標/經營者[]的類型

我試圖重寫operator[]

我知道如何覆蓋它在給定類型調用:

struct Huh { 
    int x; 
    int operator[](float idx) { return -1; } 
}; 

Huh h; 
cout << h[123.4f] << end; // works, spits out -1 

但是,如果我想改變我的下標,這些類型的數組的方式是什麼:

Huh h[10]; 
Huh h2 = h[123.4f]; // invalid!! 

看樣子這是一個不可改變的C++行爲。也就是說,類型「Huh [10]」(或任何陣列類型)的operator[]是禁止的。

或者,有沒有什麼方法可以爲陣列類型定義operator[]

我試圖讓operator[]免費函數,只發現在C++中不允許。任何其他想法?

+0

用於什麼?爲什麼不只是用你的自定義類型替換「排列類型」?你試圖得到什麼樣的邏輯? – 2012-02-22 00:48:12

+0

在真實代碼中,我的'Huh'類型本身就是一個向量 - 它有N個元素。我使用N值索引來索引該類型。最後,我希望它能夠收集。 – 2012-02-22 01:34:59

+0

你不能這樣做,我很高興。 – 2012-02-22 00:54:45

回答

4

沒有骰子。你不能重載一個「指向對象」方法的指針,因爲指針不是一個運算符被重載的對象。

+1

指針在哪裏? – 2012-02-22 00:55:04

+0

數組在訪問它們時通常會像指針一樣工作(有些情況下它並不存在,但這通常適用)。 – 2012-02-22 00:55:47

+0

這並不意味着這個問題中有任何指針。如果你想詳細介紹一下'a [b] === *(a + b)'的身份,那麼這很好,但是你必須明確地這樣做,並且談論不能重載'+'用於原生指針類型。此外,這裏有_definitely_ no「指向一個對象的[成員函數]」的指針。 – 2012-02-22 00:56:33