繁体   English   中英

懒惰的评估和const正确性的问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM