【发布时间】:2019-02-28 02:58:33
【问题描述】:
我正在尝试创建一个 X 指针数组,引用维度为 Y 乘以 16 的矩阵。在 C++ 中是否有任何方法可以在不使用三重指针的情况下完成此操作?
编辑:为问题添加一些上下文。
屏幕上有许多几何图形,每个几何图形都有一个已展平为 1x16 数组的变换。每个快照代表每个数量的组件的转换。所以矩阵维度是 16 x num_components x num_snapshots ,其中后两个维度在运行时是已知的。最后,我们有许多应用了运动的几何图形。
我正在创建一个接受三重指针参数的函数,尽管在我的情况下我不能使用三重指针。我可以通过哪些其他方式传递这些数据(可能通过多个参数)?最坏的情况是,我考虑将整个 3D 矩阵展平为一个数组,尽管这似乎是一件草率的事情。有更好的建议吗?
我现在拥有的:
function(..., double ***snapshot_transforms, ...)
我想要完成的事情:
function (..., <1+ non-triple pointer parameters>, ...)
下面不是我创建的使用三元指针的函数,而是显示数据的全部内容。
static double ***snapshot_transforms_function (int num_snapshots, int num_geometries)
{
double component_transform[16];
double ***snapshot_transforms = new double**[num_snapshots];
for (int i = 0; i < num_snapshots; i++)
{
snapshot_transforms[i] = new double*[num_geometries];
for (int j = 0; j < num_geometries; j++)
{
snapshot_transforms[i][j] = new double[16];
// 4x4 transform put into a 1x16 array with dummy values for each component for each snapshot
for (int k = 0; k < 16; k++)
snapshot_transforms[i][j][k] = k;
}
}
return snapshot_transforms;
}
Edit2: 我不能创建新类,也不能使用像 std 这样的 C++ 特性,因为头文件中暴露的函数原型被放入一个包装器中(不知道如何解释三重指针)以翻译成其他语言。
Edit3: 在大家对 cmets 的意见之后,我认为使用扁平数组可能是最好的解决方案。我希望有某种方法可以拆分这个三重指针,并使用包括单指针在内的简单数据类型将这些复杂的数据整齐地组织到多个数据片段中。尽管鉴于我在这里的警告,我认为没有一种很好的方法可以做到这一点。感谢大家的帮助=)
【问题讨论】:
-
是的。这很容易!
-
"有没有办法" - 是的。怎么样,你问?这是你没有问的另一个问题。如果你能展示你不喜欢的代码也会有所帮助,并且有人会向你展示更好的处理方法。
-
@Yakk-AdamNevraumont 哈!已接受答案。
-
@RemyLebeau 我添加了一些代码来展示我想要完成的工作的要点。
-
@Ash 这看起来是正确的做法。