2012-06-17 16 views
10

Utworzono klasę singleton, która używa metody GetInstance(), aby uzyskać adres instancji (wskaźnik). Wewnątrz klasy mam tablicę unsigned long int, dla której utworzyłem dla niej operator [] (bezpośredni dostęp do tablicy). Jak mogę użyć wskaźnika, który otrzymałem od GetInstance, aby użyć [] operator? Próbowałem:C++ za pomocą nawiasów kwadratowych ze wskaźnikiem do instancji

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

Ale to nie działa ... czy istnieje sposób mogę korzystać z nawiasów aby uzyskać dostęp do tablicy bezpośrednio za pomocą wskaźnika klasy?

Dzięki!

+0

Dlaczego chcesz wskaźnik? 'static risc & getInstance()' działa równie dobrze. – MSalters

+0

Instrukcje ... – SagiLow

Odpowiedz

28

Spróbuj tego:

(*Risc)[X]=... 

Plac operator wsporniki ma pierwszeństwo przed operatorem wskaźnik nieprawidłowego. Możliwe jest również, aby zadzwonić do operatora po nazwie, choć powoduje to raczej przylegający składnię:

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

Działa ... Dzięki !!! – SagiLow

+1

+1 za drugą wskazówkę, wyraźną formę. Powinieneś powiedzieć, że działa również "to" słowo kluczowe. –

1

Można używać odwołań:

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

można mieć problemy, jeśli zmodyfikowany wskaźnik, ale to nie powinno się zdarzyć w tym przypadku, ponieważ jest to singleton.

Aby uzyskać więcej informacji, patrz this answer.

Powiązane problemy