带静态/常量的变量,在这种情况下使用?

时间:2013-08-14 11:43:29

标签: c++ class opengl static const

我正在尝试创建一个由块组成的小“世界”,类似于Voxel引擎,但有点不同。

为此,我考虑创建一个类Block,它有一个方法draw()。让我们将Block视为长方体。然后我可以通过它的长度,宽度,高度来表征每个Block,并通过模型矩阵对其进行缩放,以获得固定的顶点数组(即以原点为中心的单位立方体)。

我的问题是:声明这个数组由8个类型为GLfloat的顶点组成的最佳方法是什么(即24 GLfloat个条目)。由于我可能有很多块,我希望数组只保存一次,Block的每个实例都应该使用这个精确的数组,而不是每个Block携带它。实现这一目标的最佳方法是什么? 由于我对此很陌生,我无法理解staticconst(或两者兼有?)在这里是否有用。我想过要做什么

const GLfloat unit_cube_vertices = { ... };

class Block
{ ... };

有更好/规范的方式吗?

2 个答案:

答案 0 :(得分:2)

如果数组只用于你的类(或与类的关系),我会将它声明为类的一部分(请注意,这里的静态意味着只有一个副本),即

class Block {
public:  // or private if not used anywhere else
    static const GLfloat unit_cube_vertices[24];
};

如果要全局使用,请按照声明的方式保留它。

答案 1 :(得分:1)

这个问题似乎与static / const没什么关系。这两个关键字只告诉C ++如何访问存储,以及它应该在哪里可见。你在做什么都很好。

const表示不得再更改变量。在极少数情况下,如果编译器知道值不会改变,编译器可以优化代码。

static指的是不同编译单元中对象的可见性(〜项目中的不同文件)。具有static链接的变量将不会在其他编译单元中看到。