2012-06-17 35 views
10

我創建了一個使用GetInstance()方法獲取實例地址(指針)的單例類。 在類裏面我有一個unsigned long int數組,我爲它創建了operator [](直接訪問數組)。 如何使用從GetInstance獲得的指針以便使用[] operator? 我已經試過:使用方括號指向實例的指針的C++

class risc { // singleton 
protected: 
unsigned long registers[8]; 
static risc* _instance; 
risc() { 
    for (int i=0;i<8;i++) { 
     registers[i]=0;}; 
    } 
public: 
unsigned long operator [](int i) const {return registers[i];}; // get [] 
unsigned long & operator [](int i)  {return registers[i];}; // set [] 
static risc* getInstance() { // constructor 
     if (_instance==NULL) { 
      _instance=new risc(); 
     } 
     return _instance; 
    } 
}; 

risc* Risc=getInstance(); 
*Risc[X]=... 

但它不工作...有沒有一種方法,我可以用括號直接訪問陣列使用類的指針?

謝謝!

+0

爲什麼你想要一個指針? 'static risc&getInstance()'也可以。 – MSalters

+0

說明... – SagiLow

回答

28

試試這個:

(*Risc)[X]=... 

方括號運算符的優先級高於指針引用操作。也可以叫名字的運營商,儘管這會導致一個非常笨拙的語法:

Risc->operator[](x) = ... 
+0

作品...謝謝! – SagiLow

+1

第二個提示+1顯式。你應該說這也適用於「這個」關鍵字。 –

1

您可以使用引用:

risc &Risc = *getInstance(); 
Risc[X] = ... 

,如果你修改了指針你可能有問題,但這不應該發生在這種情況下,因爲它是一個單身人士。

請參閱this answer瞭解更多詳情。