在C++中,如何声明一个只能从外部更改的类成员



我有一个类似的类

class Foo {
public:
Matrix M;
Foo();
~Foo();
}

我希望M在类内是不可变的(内部成员函数不能更改它(,但类外的代码应该能够无约束地更新它,有办法做到吗?

一点背景:我正在开发OpenGL应用程序,其中有一个Mesh类,它保存所有顶点/纹理数据,并且可以根据需要Draw()。我意识到观察矩阵和投影矩阵对场景是全局的,而模型矩阵M对每个网格都是局部的,所以我将M声明为Mesh类的公共成员,该类被初始化为单位矩阵。类外的调用者应该每帧更新M以进行转换。然而,我不希望它在课堂上被意外更改。希望这是有道理的。

这似乎违反了c++原则,但我需要以某种方式将M与类的一个实例联系起来。Matrix类型实际上是glm::mat4btw.

M移到Foo之外,然后给Foo一个指向Mconst指针/引用,例如:

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本身暴露给外部世界。

最新更新