Как я могу получить доступ к оператору индекса C ++ из класса, в котором он находится? - PullRequest
4 голосов
/ 06 апреля 2009

Где, ClassA имеет оператор как таковой, который возвращает ClassB:

class ClassA
{
public:
    ClassA();
    ClassB &operator[](int index);
}

Если я хочу получить доступ к указанному оператору из конструктора ClassA, вот так:

ClassA::ClassA()
{
    // How do I access the [] operator?
}

В настоящее время в качестве обходного пути я просто использую метод GetAtIndex (int index), который вызывает оператор [], и конструктор тоже.

Было бы хорошо, если бы я мог получить к нему доступ так же, как работает C #:

// Note: This is C#
class ClassA
{
   ClassB this[int index]
   {
       get { /* ... */ }
       set { /* ... */ }
   }

   void ClassA()
   {
       this[0] = new ClassB();
   }
}

Примечание: Я использую g ++

Ответы [ 5 ]

10 голосов
/ 06 апреля 2009

Вы можете использовать:

this->operator[](0) = ...

или

(*this)[0] = ...

Но синтаксис немного неловкий. Я обычно делаю другой метод под названием get и использую его, например ::10000

ClassB& get(size_t index) {
    return this->operator[](0); // or something more direct
}

Тогда, когда вы захотите его использовать, вы можете просто сказать:

this->get(0) = ...
8 голосов
/ 06 апреля 2009

Попробуйте следующее

(*this)[0] = ...
0 голосов
/ 11 апреля 2009

Два разных способа:

( *this ) [ index ] or this -> operator [ ] ( index )
0 голосов
/ 06 апреля 2009

Вот другой способ, не уверен, что это полезно ...

ClassA::ClassA()
{
    ClassA &_this = *this;
    _this[0] = someValue;
    _this[1] = someValue;
    _this[2] = someValue;
    _this[3] = someValue;
    _this[4] = someValue;
}
0 голосов
/ 06 апреля 2009
 ClassA::ClassA()
 {
     this->operator[]( someindex ) = whatever;
 }

Но перед тем, как использовать его, убедитесь, что все данные, от которых может зависеть оператор, полностью созданы.

...