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

Posted

技术标签:

【中文标题】如何从 C++ 下标运算符所在的类中访问它?【英文标题】:How do I access a C++ subscript operator from within the class in which it resides? 【发布时间】:2009-04-06 19:23:02 【问题描述】:

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

【问题讨论】:

这个问题几乎是重复的:***.com/questions/702003/thisi/702015 【参考方案1】:

你可以使用:

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

或:

(*this)[0] = ...

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

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

那么当你想使用它时,你可以说:

this->get(0) = ...

【讨论】:

【参考方案2】:

试试下面的

(*this)[0] = ...

【讨论】:

【参考方案3】:
 ClassA::ClassA()
 
     this->operator[]( someindex ) = whatever;
 

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

【讨论】:

【参考方案4】:

两种不同的方式:

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

【讨论】:

【参考方案5】:

这里还有一个方法,不知道有没有用...

ClassA::ClassA()

    ClassA &_this = *this;
    _this[0] = someValue;
    _this[1] = someValue;
    _this[2] = someValue;
    _this[3] = someValue;
    _this[4] = someValue;

【讨论】:

第三行应该是“ClassA& _this = *this;”所以你不会复制这个。

以上是关于如何从 C++ 下标运算符所在的类中访问它?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 C++ 中指向该数组的指针访问另一个类中的数组?

如何覆盖 C++ 类中的 bool 运算符?

如何访问禁用“=”运算符的类的对象?

C++ 从类中调用重载运算符

枚举类中的 c++ 运算符重载

从外部类 C++ 正确调用嵌套类中的函数