C++ с использованием квадратных скобок с указателем на экземпляр
Я создал одноэлементный класс, который использует GetInstance()
метод, чтобы получить адрес экземпляра (указатель). Внутри класса у меня есть массив unsigned long int, который я создал operator []
для него (прямой доступ к массиву). Как я могу использовать указатель, который я получил от GetInstance
для того, чтобы использовать [] operator
? Я пробовал:
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]=...
Но это не работает... Есть ли способ, которым я могу использовать скобки для доступа к массиву напрямую с помощью указателя класса?
Спасибо!
2 ответа
Попробуй это:
(*Risc)[X]=...
Оператор квадратных скобок имеет приоритет над оператором разыменования указателя. Также возможно вызвать оператор по имени, хотя это приводит к довольно неуклюжему синтаксису:
Risc->operator[](x) = ...
Вы можете использовать ссылки:
risc &Risc = *getInstance();
Risc[X] = ...
У вас могут возникнуть проблемы, если вы измените указатель, но в этом случае этого не должно произойти, поскольку он является одиночным.
Смотрите этот ответ для более подробной информации.