重载方括号运算符以接受值

7

我正在编写一个集合类。我希望重载方括号操作符([])以提供对集合中元素的访问。

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

我的问题是我不知道如何编写代码,以便使用这个运算符来接受一个值:

myClassInstance[0] = value;

我看不到声明方括号操作符并带有额外参数(要分配给元素的值)的方法。

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

这是否可能?


你需要两个 operator[] (int) 版本,一个是 const 版本,另一个是你所要求的非 const 版本。原始版本应该带有 const,以便在调用 const 对象时使用; - engf-010
@Edwin:我看到了你的另一条评论。我会试试看的。谢谢。 - Jonathan Wood
3个回答

9

编写一个 int_proxy 类,它可隐式转换为 int 并可从 int 赋值。您至少需要两个成员函数:

operator int();
int_proxy& operator=(int);

在这个代理类中,存储您需要的任何信息以便能够检索并设置容器中的值。在转换运算符中进行检索,在赋值运算符中进行赋值。

1
你忘记提到原始的int operator应该有一个const修饰符,这使它可以在const对象上调用。 - engf-010
我曾经想过这个比那个更简单,但看起来并不是这样。谢谢! - Jonathan Wood
@Edwin: 有没有办法让我们使用[]运算符来读取一个const对象,同时又能够读写一个非const对象呢? - supercat
@supercat:抱歉,我不是很明白你的意思,但在代理类中,只要不违反constness,你可以做任何你想做的事情。也许你应该发布一个单独的问题,链接到这个问题。 - engf-010

2

返回一个引用对象,该对象具有operator =,可以将int存储在需要的位置。查看STL中的布尔向量技巧,例如,不一定是一个非常出色的例子。


1

写:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接