相关疑难解决方法(0)

类将数据成员存储在顺序存储器中?

这个问题的简短版本:指向类的第一个数据成员的指针是否会产生指向其所有数据成员的指针?

讨论:

我正在阅读一些示例代码,这很有趣.当一个特定的函数(在这种情况下是glUniformMatrix4fv来自OpenGL 的C函数)作为一个参数作为一个数组时,这将以通用的C方式传递,使用指向数组第一个元素的地址的指针,如下所示:

glUniformMatrix4fv(glvariable, 1, 0, &newmatrix[0]); //指的是newmatrix

这个开发人员有一个C++类,用于创建一个4X4矩阵,总共16个浮点数.但是,该类的数据成员分为4个独立的向量,每个向量包含4个数据成员:

以下是该类的数据成员:

vec4 x;
vec4 y;
vec4 z;
vec4 w;
Run Code Online (Sandbox Code Playgroud)

vec4又类提供这些数据成员:

T x;
T y;
T z;
T w;
Run Code Online (Sandbox Code Playgroud)

然后他创建一个函数来指向第一个vec4 x数据成员:

    const T* Pointer() const
{
    return &x.x;
}
Run Code Online (Sandbox Code Playgroud)

不知何故,这奇迹般地转化为发送所有4个vec4对象及其各自的4个组件:

glUniformMatrix4fv(modelviewUniform, 1, 0, modelviewMatrix.Pointer());
Run Code Online (Sandbox Code Playgroud)

我对C++很新,但这让我感到惊讶,你只能指向一个数据成员并期望所有其他成员也被发送.是因为类按特定顺序定义它们吗?如果在类定义中以不同的顺序定义它们会怎样?

c++ opengl pointers opengl-es

3
推荐指数
1
解决办法
1315
查看次数

标签 统计

c++ ×1

opengl ×1

opengl-es ×1

pointers ×1