作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这个代码:
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 类,因为我想在代码中处理值作为 X
、Y
、Z
,但是对于某些操作,我需要将一个连续的值数组传递给一个函数。所以整个 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/
我是一名优秀的程序员,十分优秀!