Можно ли перегрузить опреатор [] как не член класса?

154
25 сентября 2018, 12:10

В целом вопрос в заголовке, не знаю что ещё добавить, кроме примера

Перегрузка как член класса:

class A
{
public:
    int* some_arr;
    int operator [](uint_t i)
    {
        return this->some_arr[i];
    }
}

Перегрузка, как я себе представляю, как не член класса:

class A
{
   // ...
public:
   int* some_arr;
   // ...
}
int operator [](const A& a, uint_t i) // либо поменять аргументы местами, поэтому-то и не уверен
{
    return a.some_arr[i];
}

И если перегружать как не член класса, то, получается, нужно передавать экземпляр, но сначала нужно передавать экземпляр, а потом индекс, или наоборот? Или вообще нельзя?

Answer 1

Нет:

16.5.5 Subscripting [over.sub]

1 operator[] shall be a non-static member function with exactly one parameter.

READ ALSO
Code::Blocks и CMake - запускаемый проект по умолчанию

Code::Blocks и CMake - запускаемый проект по умолчанию

Продолжая знакомиться с Code::Blocks возник вопрос по связке его с CMakeКак в CMake назначить запускаемый проект по умолчанию ?

154
C++ передача указателя в функцию

C++ передача указателя в функцию

Есть функция с сигнатурой:

196
c++: std::in, _getch() работаю некорректно

c++: std::in, _getch() работаю некорректно

Для отладки программы необходимо приостанавливать работу программы, порционно выводить некоторую информацию на экран и затем по команде...

178
Помогите справиться с заданием [закрыт]

Помогите справиться с заданием [закрыт]

Создать программу, которая демонстрирует, что функция со своим собственным try-блоком не должна перехватывать все возможные исключения, выброшенные...

171