如何在同一文件 C++ 中使用重载 []

How to use overloaded [] in same file C++

所以我有这个功能

template<class KEY,class T, bool (*tlt)(const KEY& a, const KEY& b)>
T BSTMap<KEY,T,tlt>::put(const KEY& key, const T& value) {
      if (!has_key(key))
          throw KeyError("BSTMap::put");
      this[key] = value;
      ++mod_count;
      return this[key];
}

应该使用我重载的 [],如这段代码所示。

T& BSTMap<KEY,T,tlt>::operator [] (const KEY& key) {
    if (has_key(key))
        return find_key(map, key)->value.second;
    find_key(map, key)->value = Entry(key, T());
    used++, mod_count++;
    return find_key(map, key)->value.second;
}

本质上,本例中的 [] 运算符采用 KEY 并在条目不存在时创建该条目,否则它 returns 对该区域中现有值的引用。那么我的问题是,如何在文件中使用重载的 [] 运算符来修改我的数据。我尝试使用 this[],但这不起作用。

this 是一个指针,大概 (*this)[key] 通过首先取消引用然后索引是合法的。

该方法的官方名称是operator[],所以你可以直接使用:

return operator[](key);

你也可以取消引用this来做一个引用:

return (*this)[key];