5

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

一切听起来都很好,直到我打电话给我:

const QMatrix4x4& oE_GLCamera::getModelViewProjection() const;

来自 const oE_GLCamera 实例的函数...我在应用程序中的任何地方都使用 const 引用从 CAD 视口中提取相机数据而不更改相机,但是如果成员变量无效,我的 getter 函数会对成员变量执行惰性求值 - 因此破坏了 const 正确性。

是否有我不知道的语言功能或设计范例可以帮助解决这个问题?还是惰性求值从根本上与 const 正确性不兼容?我知道 const_cast<>,我自己从未使用过它,但阅读了一些关于它的内容,归结为:如果你使用它,那么你已经在某个地方出错了。还是会成为我的救星?

任何建议都会受到欢迎,Cam

4

1 回答 1

15

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

也许,mutable

标记为的类的成员mutable始终是非- const,即使它是通过引用或指向所属类的引用或指针访问的,该类是对 的const引用或指针const

于 2010-12-20T22:18:44.427 回答