我有一堂这样的课
class Foo {
public:
Matrix M;
Foo();
~Foo();
}
Run Code Online (Sandbox Code Playgroud)
我想M
在类内部是不可变的(内部成员函数不能改变它),但是类外部的代码应该能够不受约束地更新它,有没有办法做到这一点?
一点背景:我正在开发一个 OpenGL 应用程序,我有一个Mesh
类可以保存所有顶点/纹理数据,并且可以Draw()
按需使用。我意识到观察矩阵和投影矩阵对于场景是全局的,而模型矩阵M
对于每个网格都是局部的,所以我声明M
为类的公共成员Mesh
,它被初始化为单位矩阵。类外的调用者应该更新M
每一帧以进行转换。但是,我不希望它在课堂内被意外更改。希望这是有道理的。
这似乎违反了c++
原则,但我需要以某种方式绑定M
到类的实例。该Matrix
类型实际上是glm::mat4
BTW。
移动M
之外Foo
,然后给Foo
一const
指针/参照M
,例如:
Matrix M;
class Foo {
public:
const Matrix &Mref;
Foo() : Mref(M) {}
~Foo();
};
Run Code Online (Sandbox Code Playgroud)