我正在写一个集合类。我想重载方括号运算符([])以提供对集合中元素的访问。
int operator[](int i)
{
// Do stuff here
}
我的问题是我没有看到如何写这个,以便我可以使用此运算符接受一个值:
myClassInstance[0] = value;
我认为没有办法用附加参数声明方括号运算符(要赋给元素的值)。
我知道我可以简单地返回int&并且调用者可以为其分配值,但在内部,每个元素的存储格式与公开的格式不同。
这甚至可能吗?
答案 0 :(得分:9)
编写一个int_proxy
类,该类可以隐式转换为int
,并且可以从int
分配。您至少需要两个成员函数:
operator int();
int_proxy& operator=(int);
在此代理类中,存储您需要能够检索的任何信息并在容器中设置值。在转换运算符中进行检索,在赋值运算符中进行赋值。
答案 1 :(得分:2)
返回对具有operator =的对象的引用,该对象可以填充int所需的位置。以STL中的布尔向量技巧为例,如果不一定是一个非常好的示例性例子。
答案 2 :(得分:1)
写:
int& operator[](int i)
{
// Do stuff here
}