假设QOpenGLFunctions
对象是类的成员。由于gl*
方法在适当的地方未标记为 const ,因此无法在 const 方法中调用它们,即使它们根本不会进行任何状态更改。
我使用QOpenGLFunctions
错了吗?
答案 0 :(得分:2)
这有些哲学,但我可以说你正在使用它"错误"。通过使QOpenGLFunctions
成为您班级的成员,您可以说OpenGL函数是您的类状态的一部分。他们真的不是。它们是您的班级使用的东西,但它们不是 您班级的一部分。
您有几种方法可以解决此问题:
mutable
添加到成员定义(mutable QOpenGLFunctions m_...
)。OpenGLFunctions
的指针,并在您的类的构造函数中分配对象。使用mutable
对我来说总是让人觉得有点笨拙,即使它有合法用途。在这种情况下,我显然更喜欢选项2。除了解决你的const-correctness问题之外,它还表达了你的类和OpenGLFunctions
之间较弱的耦合,它与我在引言中解释的正确关系非常匹配。