我正在将 N-Dim 图像立方体编码为不同的图像格式。直到运行时我才知道图像的尺寸,而我用来从原始图像中读取的库需要一个 N-dim 数组目标缓冲区作为参数。
如何在 C++ 中声明这样的数组?谢谢 :)
我正在将 N-Dim 图像立方体编码为不同的图像格式。直到运行时我才知道图像的尺寸,而我用来从原始图像中读取的库需要一个 N-dim 数组目标缓冲区作为参数。
如何在 C++ 中声明这样的数组?谢谢 :)
简短的回答是您不能在 C++ 中声明这样的数组。数组的维度是类型的一部分(有一个杂项例外,有时对于数组声明,其中一个维度的值可能是未知的)。extern
维数始终是类型的一部分,并且在编译时必须知道类型。
您可能可以做的是使用适当大小的“平面”数组。例如,如果您需要一个 3x3...x3 数组,那么您可以3^n
在运行时计算,动态分配那么多int
(可能使用 avector<int>
方便),并且您拥有与int[3][3]...[3]
. 您可以通过void*
.
我不确定在 C++ 中将平面数组别名为多维数组是否严格合法。但首先,您调用的函数实际上可能不会以这种方式为其别名,因为它在编译时也不知道维度。其次,它会在实践中工作(如果没有,你调用的函数要么被破坏,要么有一些狡猾的方法来处理这个问题,你应该找出并复制)。
在这种情况下,您不能使用数组。数组仅适用于那些在编译时大小和维度已知的数据。尝试使用std::vector数组代替