C++ 如何创建用于存储和返回浮点数组的结构?
我想创建一个保存方形纹理纹理坐标的结构。结构应该只有一个静态成员,它是一个由8个浮点组成的常量数组,并且只有一个函数返回数组 我试过这个:C++ 如何创建用于存储和返回浮点数组的结构?,c++,arrays,pointers,C++,Arrays,Pointers,我想创建一个保存方形纹理纹理坐标的结构。结构应该只有一个静态成员,它是一个由8个浮点组成的常量数组,并且只有一个函数返回数组 我试过这个: struct TextureCoordinates { static constexpr GLfloat m_texturecoords[8] = { 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f,
struct TextureCoordinates
{
static constexpr GLfloat m_texturecoords[8] = {
1.0f, 0.0f,
1.0f, 1.0f,
0.0f, 1.0f,
0.0f, 0.0f,
};
GLfloat* const gettexcoords() { return &m_texturecoords; }
};
但是我得到一个错误,返回类型与函数类型不匹配。如何更改此结构以使其以内存高效的方式工作?
GLfloat*const
表示GLfloat指针是常量,即指针不是它指向的值是常量。发件人:
从右到左读取指针声明
常数X*p表示“p指向一个常数X”:X对象不能
可通过p
X*const p表示“p是指向X的常量指针
is non const”:您不能更改指针p本身,但可以
通过p更改X对象
常数X*常数p表示“p是常数”
指向常数X的指针“:不能更改指针p本身,
也不能通过p更改X对象
您需要返回常量GLfloat*
。由于该方法不属于特定对象,因此可以是静态的
static const GLfloat* gettexcoords() { return m_texturecoords; }
演示:。谢谢杨!我还必须将返回值更改为
&m_texturecoords[0]
,这会导致任何问题吗?我编辑了答案。您只需返回m_texturecoords
。数组名自动成为指针。还请注意,此解决方案还使方法常量,这意味着它可以在const qualifiedTextureCoordinates
InstanceMethod上调用。它甚至可以是static
。为什么只有static
成员的struct
?可能重复@LightnessRacesInOrbit,我希望数据可以从任何地方访问,只存储一次,并且是常量。这是我唯一能想到的办法。你知道我应该用什么更好的方法来实现吗?@ViktorAxén只需在名称空间范围内声明它,即全局?这个类有什么好处?@LightnessRacesInOrbit我不知道,在名称空间中声明它似乎更好,不知道为什么我认为它必须属于一个类或结构。