如何在同一个 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]; }
如果您想为返回的引用分配一个新值。
例子
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]; }
如果您想为返回的引用分配一个新值。