2012-06-17 15 views
10

मैंने एक सिंगलटन क्लास बनाया है जो उदाहरण पता (सूचक) प्राप्त करने के लिए GetInstance() विधि का उपयोग करता है। कक्षा के अंदर मेरे पास बिना हस्ताक्षरित लंबी int की एक सरणी है जिसे मैंने operator [] बनाया है (सरणी तक सीधी पहुंच)। [] operator का उपयोग करने के लिए मुझे GetInstance से प्राप्त पॉइंटर का उपयोग कैसे कर सकता हूं? मैं कोशिश की है:सी ++ उदाहरण के लिए पॉइंटर के साथ वर्ग ब्रैकेट का उपयोग

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

आप एक सूचक क्यों चाहते हैं? 'स्थिर रिस्क और getInstance() 'बस काम करता है। – MSalters

+0

निर्देश ... – SagiLow

उत्तर

28

इस प्रयास करें:

(*Risc)[X]=... 

वर्ग कोष्ठक ऑपरेटर संकेतक भिन्नता ऑपरेटर पर पूर्वता लेता है।

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

काम करता है ... धन्यवाद !!! दूसरी टिप, स्पष्ट रूप के लिए – SagiLow

+1

+1। आपको कहना चाहिए कि "यह" कीवर्ड भी सफ़ेद काम करता है। –

1
संदर्भ

आप उपयोग कर सकते हैं: यह भी संभव नाम से ऑपरेटर कॉल करने के लिए, हालांकि यह एक नहीं बल्कि भद्दा वाक्य रचना में जो परिणाम है

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

आप समस्याओं हो सकता था अगर आप सूचक संशोधित, लेकिन यह इस मामले में नहीं होना चाहिए क्योंकि यह एक सिंगलटन है। अधिक जानकारी के लिए

this answer देखें।