如何从它所在的类中访问C ++下标运算符?

时间:2009-04-06 19:23:03

标签: c# c++ subscript-operator

其中,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 个答案:

答案 0 :(得分:10)

您可以使用:

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

或:

(*this)[0] = ...

但语法有点尴尬。我通常会创建另一个名为get的方法并使用它,例如:

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

然后当你想使用它时,你可以说:

this->get(0) = ...

答案 1 :(得分:8)

尝试以下

(*this)[0] = ...

答案 2 :(得分:0)

 ClassA::ClassA()
 {
     this->operator[]( someindex ) = whatever;
 }

但请确保操作员可能依赖的任何成员数据在您使用之前完全构建。

答案 3 :(得分:0)

这是另一种方式,不确定它是否有用......

ClassA::ClassA()
{
    ClassA &_this = *this;
    _this[0] = someValue;
    _this[1] = someValue;
    _this[2] = someValue;
    _this[3] = someValue;
    _this[4] = someValue;
}

答案 4 :(得分:0)

两种不同的方式:

( *this ) [ index ] or this -> operator [ ] ( index )