如何在同一文件 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];
所以我有这个功能
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];