[英]Lazy evaluation and problems with const correctness
我制作了一个openGL相机类,它使用延迟评估通过getter函数提供最终投影或模型 - 视图 - 投影矩阵。 用户在实例的整个生命周期(FOV,位置等)中提供各种相机参数,但不是每次更改参数时都重新计算投影矩阵和/或MVP矩阵,而是设置“已更改”标志(即旧的缓存矩阵现在无效)。 只要用户随后请求更新的最终矩阵,就会重新计算,结果缓存,并返回const引用。
一切都听起来不错,直到我打电话给我:
const QMatrix4x4& oE_GLCamera::getModelViewProjection() const;
来自const oE_GLCamera实例的函数...我在我的应用程序中使用const引用来从CAD视口中提取相机数据而不更改相机,但是如果它们无效,我的getter函数会对成员变量执行惰性求值 - 因此会破坏const正确性。
是否有语言功能或设计范例我不知道如何帮助解决这个问题? 或者懒惰的评估从根本上与const正确性不兼容? 我知道const_cast <>,我自己从来没有使用它,但读了一些关于它的事情归结为:如果你使用它,你已经在某个地方出错了。 还是会成为我的救世主?
Cam,任何建议都会得到很好的接受
是否有语言功能或设计范例我不知道如何帮助解决这个问题?
或许, mutable
吗?
标记为mutable
的类的成员始终是非const
即使它是通过引用或指向拥有类的指针访问的,该类是const
引用或指向const
的指针。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.