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

时间:2010-12-20 22:16:04

标签: c++ lazy-evaluation const-correctness

我制作了一个openGL相机类,它使用延迟评估通过getter函数提供最终投影或模型 - 视图 - 投影矩阵。用户在实例的整个生命周期(FOV,位置等)中提供各种相机参数,但不是每次更改参数时都重新计算投影矩阵和/或MVP矩阵,而是设置“已更改”标志(即旧的缓存矩阵现在无效)。每当用户随后请求更新的最终矩阵时,都会重新计算,结果缓存,并返回const引用。

在我打电话给我之前,一切听起来都很好:

const QMatrix4x4& oE_GLCamera::getModelViewProjection() const;
来自const oE_GLCamera实例的

函数...我在我的应用程序中使用const引用来从CAD视口中提取相机数据而不更改相机,但是如果它们无效,我的getter函数会对成员变量执行惰性求值 - 因此会破坏const -correctness。

是否有语言功能或设计范例我不知道如何帮助解决这个问题?或者懒惰的评估从根本上与const正确性不兼容?我知道const_cast<>,我自己从未使用它,但读了一些关于它的事情归结为:如果你使用它,你已经在某个地方出错了。或者它会成为我的救世主?

任何建议都会得到很好的接受, 凸轮

1 个答案:

答案 0 :(得分:15)

  

是否有语言功能或设计范例我不知道如何帮助解决这个问题?

也许,mutable

标记为mutable的类的成员始终为非const,即使通过引用或指向所属类const的引用或指向const的指针。