gpt4 book ai didi

c++ - 将指向数组中 float 的指针传递给接受固定大小数组的函数

转载 作者:搜寻专家 更新时间:2023-10-31 00:55:57 25 4
gpt4 key购买 nike

我有许多具有以下形式的函数:

typedef float arr3[3];
float newDistanceToLine(arr3 &p0, arr3 &p1, arr3 &p2);

现在发现将大量点存储到长数组中很方便:

int n_points = 14;
float *points;
points = new float[3*n_points];

有没有办法将指向数组“点”的不同值的指针传递给我接受固定大小数组的函数?我知道以下操作失败了,但是,我想做类似的事情:

newDistanceToLine(&points[3], &points[6], &points[9]);

或获得有关如何最好地重用我的代码的任何帮助。

谢谢!

最佳答案

更改newDistanceToLine 的界面以使用基于可称为array_Viewspan 的模式的类型 - 阅读此 discussion

像这样:

typedef float arr3[3];
class arr3_view
{
public:
arr3_view(arr3& arr) : data(arr) {}
arr3_view(float* data, std::size_t size) : data(data)
{
if (size != 3) // or < 3 - I am not sure what is better for your case
throw std::runtime_error("arr3 - wrong size of data: " + std::to_string(size));
}

float* begin() { return data; }
float* end() { return data + 3; }
float& operator [](std::size_t i) { return data[i]; }
// and similar stuff as above for const versions

private:
float* data;
};

float newDistanceToLine(arr3_view p0, arr3_view p1, arr3_view p2);

所以 - 对于您的 9 元素数组,我们将有这样的用法:

newDistanceToLine(arr3_view(arr, 3), 
arr3_view(arr + 3, 3),
arr3_view(arr + 6, 3));

关于c++ - 将指向数组中 float 的指针传递给接受固定大小数组的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40786601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com