2012-06-17 38 views
10

Tôi đã tạo một lớp singleton sử dụng phương thức GetInstance() để lấy địa chỉ mẫu (con trỏ). Bên trong lớp tôi có một mảng dài unsigned dài mà tôi đã tạo ra operator [] cho nó (truy cập trực tiếp vào mảng). Làm cách nào tôi có thể sử dụng con trỏ tôi nhận được từ GetInstance để sử dụng [] operator? Tôi đã thử:C++ sử dụng dấu ngoặc vuông có con trỏ đến ví dụ

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

Nhưng nó không hoạt động ... có cách nào tôi có thể sử dụng dấu ngoặc để truy cập trực tiếp bằng cách sử dụng con trỏ lớp?

Cảm ơn!

+0

Tại sao bạn muốn có con trỏ? 'static risc & getInstance()' cũng hoạt động tốt. – MSalters

+0

Hướng dẫn ... – SagiLow

Trả lời

28

Hãy thử điều này:

(*Risc)[X]=... 

Nhà điều hành dấu ngoặc vuông được ưu tiên hơn các nhà điều hành con trỏ dereference. Nó cũng có thể gọi tổng đài theo tên, mặc dù điều này dẫn đến một cú pháp khá vụng về:

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

Hoạt động ... Cảm ơn! – SagiLow

+1

+1 cho mẹo thứ hai, hình thức rõ ràng. Bạn nên nói rằng các công trình whit "này" từ khóa quá. –

1

Bạn có thể sử dụng tài liệu tham khảo:

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

Bạn có thể có vấn đề nếu bạn sửa đổi con trỏ, nhưng điều đó không nên xảy ra trong trường hợp này vì nó là một singleton.

Xem this answer để biết thêm chi tiết.

Các vấn đề liên quan