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)
但经过几次尝试后我发现自己陷入困境,怎么可能呢?
您的订阅运算符应返回一个代理对象,该对象本身将实现订阅运算符.
如果我们将obj[2][3] = 6对此的调用分解,则会产生:
obj[2] - >代理对象obj[2][6] - >参考 int通过观察obj1你会发现除了最后[]一个之外的所有人都应该返回一个代理对象.
这通常通过使用带有"深度"参数的模板化代理来降低,并将其专门化为适当的深度.在您的情况下,您的代理将具有指向T它可能产生的第一个元素的指针,以及维度列表(作为模板参数).
尽管如此,这并不是微不足道的,因为你希望看起来有任意数量的参数.根据您的目标编译器是否支持可变参数模板,您可能会遇到一些悲伤.