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

neo*_*iro 3 c++

我有一堂这样的课

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::mat4BTW。

Rem*_*eau 6

移动M之外Foo,然后给Fooconst指针/参照M,例如:

Matrix M;

class Foo {
  public:
    const Matrix &Mref;

    Foo() : Mref(M) {}
    ~Foo();
};
Run Code Online (Sandbox Code Playgroud)

  • @neo-mashiro 当然,请确保 `M` 比 `Foo` 的所有实例都持久,否则会发生不好的事情。 (2认同)