C ++: перегрузка оператора [] для вектора <> - PullRequest
0 голосов
/ 25 июня 2018

Я сейчас пытаюсь перегрузить оператор [] для векторов.Я пытаюсь заставить этот оператор работать как в Matlab или Python для отрицательных индексов или индексов, превышающих длину вектора.Моя проблема не в том, чтобы получить правильный результат, а в том, чтобы фактически перегрузить оператор, зная, что я буду использовать не перегруженный оператор в коде перегрузки.Мне это нужно для векторов определенного класса, но было бы еще лучше, если бы он работал для любого vector.

. Прямо сейчас мой код: header:

MyClass std::vector::operator[](std::vector<MyClass> const vector,int const idx) const;

source:

Myclass vector::operator[](vector<MyClass> const vector,int const idx) const {
    n=vector.size()
    if((idx>=0) && (idx<n)){
        return vector[idx];
    }
    else if(idx<0){
        return vector[n+idx%n]
    }
    else{
        return vector[idx%n]
    }
}

И я получаю ошибки:

error: 'template<class _Tp, class _Alloc> class std::vector' used without template parameters
error: non-member function 'MyClass operator[](std::vector<MyClass>, int)' cannot have cv-qualifier
error: 'MyClass operator[](std::vector<MyClass>, int)' must be a nonstatic member function

Извините, если эта проблема уже обсуждалась, но я не смог ее найти ... Большое спасибо взаранее за ваши ответы!

1 Ответ

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

Ваша ошибка связана с синтаксисом:

vector::operator[]

должно быть

vector<MyClass>::operator[]

Однако вы не можете произвольно переопределить операторы классов, которыми вы не владеете.Что вы можете сделать, это создать свой собственный класс MyVector, который публично наследует от vector:

struct MyVector : std::vector<MyClass>
{
    MyClass& operator[](std::size_t index)
    { 
        // ...
    } 
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...