我有一个类似的类
class Foo {
public:
Matrix M;
Foo();
~Foo();
}
我希望M
在类内是不可变的(内部成员函数不能更改它(,但类外的代码应该能够无约束地更新它,有办法做到吗?
一点背景:我正在开发OpenGL应用程序,其中有一个Mesh
类,它保存所有顶点/纹理数据,并且可以根据需要Draw()
。我意识到观察矩阵和投影矩阵对场景是全局的,而模型矩阵M
对每个网格都是局部的,所以我将M
声明为Mesh
类的公共成员,该类被初始化为单位矩阵。类外的调用者应该每帧更新M
以进行转换。然而,我不希望它在课堂上被意外更改。希望这是有道理的。
这似乎违反了c++
原则,但我需要以某种方式将M
与类的一个实例联系起来。Matrix
类型实际上是glm::mat4
btw.
将M
移到Foo
之外,然后给Foo
一个指向M
的const
指针/引用,例如:
Matrix M;
class Foo {
public:
const Matrix &Mref;
Foo() : Mref(M) {}
~Foo();
};
像这样的东西怎么样
struct Matrix {
void change() {}
};
class Foo {
public:
Matrix M;
void bar() const {
// M.change(); can't change since it's a const function.
}
Foo();
~Foo();
};
int main() {
Foo f;
f.M.change();
}
在const
函数中拥有Foo
内部的所有操作,但将M
本身暴露给外部世界。