(* Это) [я]? - PullRequest
       43

(* Это) [я]?

1 голос
/ 31 марта 2009

Я перегрузил оператор [] в моем классе. Есть ли лучший способ вызвать эту функцию из моего класса, кроме (*this)[i]?

Ответы [ 6 ]

8 голосов
/ 31 марта 2009

добавить функцию в (size_t i) и использовать эту функцию

EDIT
если вы активно используете stl, избегайте семантической противоречивости: в std::vector operator[] не проверяется, является ли индекс действительным, но при проверке (..) и может выдаваться исключение std::out_of_range. Я думаю, что в проекте с более stl подобное поведение ожидается от вашего класса.
Возможно, это имя не подходит для этой функции.

8 голосов
/ 31 марта 2009

Ну, вы можете использовать «operator [] (i)».

6 голосов
/ 31 марта 2009

Это может быть разумным компромиссом:

T& me = *this;

// ...

me[i];
6 голосов
/ 31 марта 2009

Не красиво, но явно:

this->operator[](i)

Если вы обнаружите, что вам нужно делать это много, создайте функцию At (), которая точно выполняет то, что делает оператор []. Затем вы можете сказать:

this->At(i)
4 голосов
/ 31 марта 2009

Поскольку вы что-то делаете в своем собственном классе, почему бы просто не использовать приватную функцию, названную так, как вы считаете нужным:

class MyClass
{
    private:
        SomeType& Item(int index) { /* return a value */ }
    public:
        SomeType& operator[](int index) { return Item(index); }
        void SomeFunction(void);
}

void myClass::SomeFunction(void)
{
    SomeType localVar = Item(42); // internal access
}

int main(int argCount, char ** argList)
{
    MyClass myClass;
    SomeType x;

    x = myClass[42]; // external access

    return 0;
}
0 голосов
/ 31 марта 2009

this->[i] даже не компилируется. Единственный другой вариант - this->operator[](i).

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