Переопределение индекса / оператора [] для массива типов - PullRequest
1 голос
/ 22 февраля 2012

Я на 99% уверен, что ответом на этот вопрос будет «нет игральных костей», но я все равно попробую ...

Я пытаюсь переопределить operator[].

Я знаю, как переопределить его для вызовов данного типа:

struct Huh {
    int x;
    int operator[](float idx) { return -1; }
};

Huh h;
cout << h[123.4f] << end;  // works, spits out -1

Но что если я захочу изменить способ подстановки массива следующих типов:

Huh h[10];
Huh h2 = h[123.4f];  // invalid!!

Появляетсяэто неизменяемое поведение C ++.Таким образом, operator[] для типа "Huh [10]" (или любого типа массива) является недопустимым.

Или, есть ли какой-нибудь способ определить operator[] для типа с массивом?

Я попытался сделать operator[] бесплатной функцией только для того, чтобы обнаружить, что это запрещено в C ++.Есть другие идеи?

1 Ответ

4 голосов
/ 22 февраля 2012

Без кубиков.Вы не можете перегрузить методы «указатель на объект», так как указатель не является объектом с операторами, которые должны быть перегружены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...