运算符[] []过载

是否可以重载[]运算符两次? 要允许,像这样: function[3][3] (就像在一个二维数组中)。

如果可能的话,我希望看到一些示例代码。


你可以重载operator[]来返回一个可以再次使用operator[]的对象来获得结果。

class ArrayOfArrays {
public:
    ArrayOfArrays() {
        _arrayofarrays = new int*[10];
        for(int i = 0; i < 10; ++i)
            _arrayofarrays[i] = new int[10];
    }

    class Proxy {
    public:
        Proxy(int* _array) : _array(_array) { }

        int operator[](int index) {
            return _array[index];
        }
    private:
        int* _array;
    };

    Proxy operator[](int index) {
        return Proxy(_arrayofarrays[index]);
    }

private:
    int** _arrayofarrays;
};

然后你可以像这样使用它:

ArrayOfArrays aoa;
aoa[3][5];

这只是一个简单的例子,你想添加一堆边界检查和东西,但你明白了。


表达式x[y][z]要求x[y]求值为支持d[z]的对象d

这意味着x[y]应该是一个带有operator[]的对象,该operator[]计算结果为也支持operator[]的“代理对象”。

这是链接它们的唯一方法。

或者,重载operator()以获取多个参数,以便可以调用myObject(x,y)


如果您在first []调用中返回某种代理类,则可能会发生这种情况。 然而,还有其他的选择:你可以重载operator(),它可以接受任意数量的参数( function(3,3) )。

链接地址: http://www.djcxy.com/p/73097.html

上一篇: Operator[][] overload

下一篇: How do I use the conditional operator (? :) in Ruby?