Как перегрузить оператор '=' аргументами? - PullRequest
0 голосов
/ 27 июня 2018

Какой будет правильный синтаксис, чтобы использовать '=', чтобы установить какое-либо значение для члена класса и предоставить дополнительные аргументы? Например. позиции в векторе:

MyClass<float> mt;
mt(2,4) = 3.5;

Я пробовал:

template <class _type> 
_type myClass<_type>::operator()(int r,int c) {
    return data[r*nCols+c]; 
};

template <class _type>  
myClass<_type>::operator= (int r, int c, _type val) { 
    data(r,c) = val; 
};

Но компилятор говорит мне, что я могу переопределить оператор '=' с 1 аргументом.

1 Ответ

0 голосов
/ 27 июня 2018

Когда вы перегружаете оператор =, вам нужно иметь только правое значение в аргументах. Поскольку вы перегрузили оператор (), вам не нужно обрабатывать значения r и c с помощью оператора =. Вы можете просто использовать mt(2,4) = 3.5;, а перегруженный оператор () будет обрабатывать часть mt(2,4). Затем вы можете просто установить для возвращаемых данных желаемое значение без перегрузки любого оператора =.

Вам необходимо вернуть ссылку на данные, чтобы вы могли их редактировать, однако:

template <class _type>
_type& myClass<_type>::operator()(int r,int c) {
    return data[r*nCols+c]; 
};
...