Operator[][] overload(运算符[][] 重载)
问题描述
是否可以重载 [] 运算符两次?为了允许,像这样:function[3][3](就像在二维数组中).
Is it possible to overload [] operator twice? To allow, something like this: function[3][3](like in a two dimensional array). 
如果可能的话,我想看看一些示例代码.
If it is possible, I would like to see some example code.
推荐答案
你可以重载 operator[] 来返回一个你可以再次使用 operator[] 的对象得到结果.
You can overload operator[] to return an object on which you can use operator[] again to get a result.
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;
};
然后你可以像这样使用它:
Then you can use it like:
ArrayOfArrays aoa;
aoa[3][5];
这只是一个简单的例子,你想添加一堆边界检查和东西,但你明白了.
This is just a simple example, you'd want to add a bunch of bounds checking and stuff, but you get the idea.
这篇关于运算符[][] 重载的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:运算符[][] 重载
				
        
 
            
        - 使用 __stdcall & 调用 DLLVS2013 中的 GetProcAddress() 2021-01-01
 - XML Schema 到 C++ 类 2022-01-01
 - GDB 不显示函数名 2022-01-01
 - 将 hdc 内容复制到位图 2022-09-04
 - DoEvents 等效于 C++? 2021-01-01
 - 哪个更快:if (bool) 或 if(int)? 2022-01-01
 - 如何提取 __VA_ARGS__? 2022-01-01
 - OpenGL 对象的 RAII 包装器 2021-01-01
 - 将函数的返回值分配给引用 C++? 2022-01-01
 - 从父 CMakeLists.txt 覆盖 CMake 中的默认选项(...)值 2021-01-01
 
						
						
						
						
						