gpt4 book ai didi

C++如何将类数组视为主要类型数组?

转载 作者:行者123 更新时间:2023-11-28 02:54:27 26 4
gpt4 key购买 nike

我有这个代码:

class Vector3
{
public:
Vector3() : x(values[0]), y(values[1]), z(values[2])
{ x = y = z = 0; }

float& x;
float& y;
float& z;
private:
float[3] values;
};

class Model
{
public:
Vector3 vertices[64];
};

我正在做这个 vector 类,因为我想在代码中处理值作为 XYZ,但是对于某些操作,我需要将一个连续的值数组传递给一个函数。所以整个 vertices[64] 数组需要是 [x0][y0][z0][x1][y1][z1][x2][y2][z2]

但是如果我这样做:

//Get first address:
void* firstAddress = &vertices[0];
//Or
void* firstAddress = vertices;

我没有所需的连续数组(数据全乱了),我猜这是因为我在 Vector3 类中有指针。有什么办法可以获得我想要的功能吗? (只有一个 float 组,但将值处理为 x、y、z)

最佳答案

首先,标准没有定义引用应该如何实现,但它们几乎肯定会占用你类中的实际内存,就像指针成员一样,破坏你希望的连续数据打包....

如果您更关注顶点容器,而您只想让 x/y/z 成员访问其中的元素,那么您可以尝试类似的方法:

template <size_t N>
class Vertices
{
public:
class Proxy
{
public:
Proxy(float* p) : x(p[0]), y(p[1]), z(p[2]) { }
float& x;
float& y;
float& z;
};

Proxy operator[](size_t n) { return Proxy(&d_[n * 3]); }
const Proxy operator[](size_t n) const { return Proxy(&d_[n * 3]); }

private:
float d_[N * 3];
};

关于C++如何将类数组视为主要类型数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22312272/

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