2012-06-17 16 views
10

He creado una clase singleton que usa el método GetInstance() para obtener la dirección de la instancia (puntero). Dentro de la clase tengo una matriz de unsigned long int para la que he creado operator [] (acceso directo a la matriz). ¿Cómo puedo usar el puntero que obtuve del GetInstance para usar el [] operator? He intentado:C++ utilizando corchetes con el puntero a la instancia

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

Pero no funciona ... ¿hay alguna manera puedo utilizar los soportes para acceder a la matriz directamente utilizando el puntero de clase?

Gracias!

+0

¿Por qué quieres un puntero? 'static risc & getInstance()' funciona igual de bien. – MSalters

+0

Instrucciones ... – SagiLow

Respuesta

28

Prueba esto:

(*Risc)[X]=... 

El operador corchetes tiene prioridad sobre el operador de referencia de puntero. También es posible llamar al operador por su nombre, aunque esto resulta en una sintaxis más bien torpe:

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

Funciona ... ¡¡¡Gracias !!! – SagiLow

+1

+1 para el segundo consejo, forma explícita. Debería decir que también funciona con esta palabra clave. –

1

Puede utilizar referencias:

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

Usted podría tener problemas si modificó el puntero, pero eso no debería suceder en este caso, ya que es un singleton.

Ver this answer para más detalles.

Cuestiones relacionadas