2012-06-17 20 views
10

Örnek adresini (işaretçi) almak için GetInstance() yöntemini kullanan bir tek sınıf oluşturdum. Sınıfın içinde, imzasız uzun bir int dizim var, bu yüzden bunun için operator []'u yarattım (diziye doğrudan erişim). [] operator'u kullanmak için GetInstance'dan aldığım işaretçiyi nasıl kullanabilirim?C++ işaretçisiyle köşeli parantezleri kullanarak örnek

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

Ama ben sınıf işaretçi kullanarak doğrudan dizisine erişmek için ayraç kullanabilirsiniz bir yolu yoktur ... çalışmaz: Denedim?

Teşekkürler!

+0

Neden bir işaretçi istiyorsun? Statik risc & getInstance() 'de çalışır. – MSalters

+0

Talimatlar ... – SagiLow

cevap

28

bu deneyin:

(*Risc)[X]=... 

köşeli parantez operatörü işaretçi çözümlemesi operatörü önceliklidir.

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

Çalışmaları ... Teşekkürler! İkinci ipucu için – SagiLow

+1

+1, açık form. Bunun için "bu" anahtar kelimesini de yazdığını söylemelisiniz. –

1

kullanabilirsiniz referanslar: Bu oldukça aksak sözdizimi sonuçlanır rağmen, adıyla operatörü aramak da mümkündür Eğer işaretçi modifiye eğer sorunlar yaşayabilecek

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

ama Bu durumda bu bir singleton olduğundan olmaz. Daha fazla ayrıntı için this answer numaralı telefona bakın.

İlgili konular