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