Как перегрузить оператор индекса [] для ссылки на массив 2d STL? - PullRequest
0 голосов
/ 20 января 2020

Я пытаюсь создать перегруженный оператор для своего класса, мой класс содержит контейнер двумерного массива. Я хочу использовать оператор следующим образом: fooClass a; a [i] [j] = 4; я не хочу использовать его как [i, j], a (i, j) или вызывать функцию для ввода или вывода элемента. Возможно ли это?

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

мой класс выглядит примерно так:

class foo
{
    public:
    foo();
    ~foo();

    foo& operator=(const foo&rhs);
    foo& operator=(const foo&&rhs);
    foo& operator=(std::initializer_list<std::initializer_list<float>> il); 
    friend std::ostream& operator<<( std::ostream& os, const foo&rhs);
    std::array<float, 3>& operator[](const int & rhs); <<<<HERE<<<< What should it return?

    private:
    std::array<std::array<float, 3>, 3> matrix;
};


int main()
{
    foo a;
    a = {{1,2,3},{4,5,6},{7,8,9}};
    a[1][2] = 13;
    cout << a[1][2] << endl;


    return(0);
}

Мой вопрос: как это сделать и что должна возвращать функция ..... operator[](const int & rhs);?

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

1 Ответ

1 голос
/ 20 января 2020

Разве это не работает?

  std::array<float, 3>& operator[](const int & rhs) {
    return matrix[rhs];
  }
...