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

时间:2016-02-18 20:18:21

标签: c++ overloading

所以我有这个功能

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并创建条目(如果它不存在),否则它返回对该区域中现有值的引用。那么我的问题是,如何在文件中使用重载的[]运算符来修改我的数据。我尝试使用this[],但这不起作用。

2 个答案:

答案 0 :(得分:4)

该方法的官方名称为operator[],因此您可以直接使用该名称:

return operator[](key);

您也可以取消引用this来提供参考:

return (*this)[key];

答案 1 :(得分:2)

this是一个指针,大概是(*this)[key]首先解除引用,然后编制索引。