Подтвердить что ты не робот

С++ с использованием квадратных скобок с указателем на экземпляр

Я создал одноэлементный класс, который использует метод 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]=...

Но это не работает... есть ли способ, которым я могу использовать скобки для прямого доступа к массиву с помощью указателя класса?

Спасибо!

4b9b3361

Ответ 1

Попробуйте следующее:

(*Risc)[X]=...

Оператор квадратных скобок имеет приоритет над оператором разыменования указателя. Также можно вызвать оператор по имени, хотя это приводит к довольно неуклюжим синтаксису:

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

Ответ 2

Вы можете использовать ссылки:

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

У вас могут возникнуть проблемы, если вы изменили указатель, но это не должно произойти в этом случае, поскольку это однострочный.

Подробнее см. этот ответ.