Nel*_*ius 6 c++ opengl methods const
以下类封装了缓冲区的OpenGL名称,并提供了一些用于更改缓冲区状态的方法:
class BufferObject {
public:
explicit BufferObject( GLenum type );
virtual ~BufferObject();
// some methods omitted
void dataStore( GLsizeiptr size, const GLvoid* data, int usage );
void* mapBufferRange( GLintptr offset, GLsizeiptr length, int accessFlag );
void unmapBuffer() const;
private:
GLuint object_;
};
Run Code Online (Sandbox Code Playgroud)
这些方法都没有改变BufferObject对象的状态,所以它们都可以声明const.然而,dataStore与mapBufferRange这两个呼叫的OpenGL方法,其中(改变GPU上的对象的状态glBufferData和 glMapBufferRange分别).我想声明它们,但没有const表明它们正在修改GPU上的状态.
在这种情况下,最佳做法是什么?
你是对的,因为它们不会修改对象本身的实际状态,所以你可以选择。
虽然没有硬性规定,但“const尽可能使用”绝对不是通用的方法。请参阅类似的函数std::vector::operator[],它不会更改vector对象的成员,但仍然提供非const版本(和不同的const版本)。
看待这个问题的一个好方法是:假设您有一个BufferObject,并将其传递给一个采用 的函数const BufferObject&。如果该函数调用,它会扰乱您的期望(您期望保持的不变量)吗dataStore()?如果是这样,请勿标记dataStore()为const。
为了解决您的特殊情况,我认为您是正确的,应该将这些函数保留为非const. 虽然它们不会修改 C++ 对象的物理内容,但它们会修改该 C++ 对象所表示的实体的逻辑状态。
| 归档时间: |
|
| 查看次数: |
143 次 |
| 最近记录: |