超载Square Brackets Operator以接受值

时间:2011-01-01 03:28:40

标签: c++ operator-overloading

我正在写一个集合类。我想重载方括号运算符([])以提供对集合中元素的访问。

int operator[](int i)
{
    // Do stuff here
}

我的问题是我没有看到如何写这个,以便我可以使用此运算符接受一个值:

myClassInstance[0] = value;

我认为没有办法用附加参数声明方括号运算符(要赋给元素的值)。

我知道我可以简单地返回int&并且调用者可以为其分配值,但在内部,每个元素的存储格式与公开的格式不同。

这甚至可能吗?

3 个答案:

答案 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
    }