如何为此结构实现[]运算符?

Poo*_*ria 3 c++ arrays operators data-structures

我想在下面有这样的事情:

template <class T>
struct Container{
 public:
  //[] operator
 private:
  T containment;
};
Run Code Online (Sandbox Code Playgroud)

包含应该是一个具有任何选择性维数的数组,如下所示:

Container<int[20][4]> obj;
Container<int[5][2][6]> obj1;
//etc...
Run Code Online (Sandbox Code Playgroud)

我想实现[]运算符,以便可以进行以下分配:

obj[2][3]=6;
obj1[1][1][3]=3;
//etc...
Run Code Online (Sandbox Code Playgroud)

但经过几次尝试后我发现自己陷入困境,怎么可能呢?

Mat*_* M. 5

您的订阅运算符应返回一个代理对象,该对象本身将实现订阅运算符.

如果我们将obj[2][3] = 6对此的调用分解,则会产生:

  • obj[2] - >代理对象
  • obj[2][6] - >参考 int

通过观察obj1你会发现除了最后[]一个之外的所有人都应该返回一个代理对象.

这通常通过使用带有"深度"参数的模板化代理来降低,并将其专门化为适当的深度.在您的情况下,您的代理将具有指向T它可能产生的第一个元素的指针,以及维度列表(作为模板参数).

尽管如此,这并不是微不足道的,因为你希望看起来有任意数量的参数.根据您的目标编译器是否支持可变参数模板,您可能会遇到一些悲伤.