如何在同一个 class 中使用重载运算符 []?

How to I use the overloaded operator [] in the same class?

例子

class MyMap {
    std::map<K,V> m_map;
    public:
        void myFunc( K const& a, V const& b ) {
    
        // want to use [] operator on the current object.

        // something like this->[a] = b;
        }
    
        V const& operator[]( K const& key ) const {
            //body
        }
    }

如何使用 operator[] 在函数 myFunc() 中使用给定的 key 访问 MyMap

您可以取消对 this 的引用,例如

void myFunc( K const& a, V const& b ) {
    (*this)[a];
}

或在函数调用语法中调用 operator[]

void myFunc( K const& a, V const& b ) {
    this->operator[](a);
}

顺便说一句:重载的 operator[] returns V const&,您不能对其执行赋值。

   // want to use [] operator on the current object.
  // something like this->[a] = b;

您可以使用运算符使用对象(*this),所以

(*this)[a] = b;

或者您可以显式调用方法 operator[],

this->operator[](a) = b;
(*this).operator[](a) = b; 

但是,正如songyuanyao所指出的,记得添加非常量版本的operator[]

    V & operator[] (K const & key)
     { return m_map[key]; }

如果您想为返回的引用分配一个新值。