4

其中,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++

4

5 回答 5

10

您可以使用:

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

或者:

(*this)[0] = ...

但是语法有点尴尬。我通常会调用另一种方法get并使用它,例如:

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

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

this->get(0) = ...
于 2009-04-06T19:28:03.457 回答
8

尝试以下

(*this)[0] = ...
于 2009-04-06T19:26:17.767 回答
0
 ClassA::ClassA()
 {
     this->operator[]( someindex ) = whatever;
 }

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

于 2009-04-06T19:25:58.220 回答
0

还有一种方法,不知道有没有用...

ClassA::ClassA()
{
    ClassA &_this = *this;
    _this[0] = someValue;
    _this[1] = someValue;
    _this[2] = someValue;
    _this[3] = someValue;
    _this[4] = someValue;
}
于 2009-04-06T19:32:33.260 回答
0

两种不同的方式:

( *this ) [ index ] or this -> operator [ ] ( index )
于 2009-04-11T15:02:32.577 回答