2012-06-17 12 views
10

Ho creato una classe singleton che utilizza il metodo GetInstance() per ottenere l'indirizzo dell'istanza (puntatore). All'interno della classe ho una matrice di unsigned long int che ho creato il operator [] per esso (accesso diretto alla matrice). Come posso usare il puntatore ricevuto da GetInstance per utilizzare lo [] operator? Ho provato:C++ utilizzando parentesi quadre con puntatore all'istanza

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]=... 

Ma non funziona ... c'è un modo posso utilizzare le staffe per accedere alla matrice direttamente utilizzando il puntatore di classe?

Grazie!

+0

Perché vuoi un puntatore? 'static risc & getInstance()' funziona altrettanto bene. – MSalters

+0

Istruzioni ... – SagiLow

risposta

28

Prova questo:

(*Risc)[X]=... 

L'operatore parentesi quadre ha la precedenza rispetto all'operatore puntatore dereference. E 'anche possibile chiamare l'operatore per nome, anche se questo si traduce in una sintassi piuttosto goffo:

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

Lavori ... Grazie !!! – SagiLow

+1

+1 per il secondo suggerimento, modulo esplicito. Dovresti dire che funziona anche con questa "parola chiave". –

1

È possibile utilizzare riferimenti:

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

Si potrebbe avere problemi se si è modificato il puntatore, ma quello non dovrebbe accadere in questo caso poiché è un singleton.

Vedere this answer per ulteriori dettagli.