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

我有一堂这样的课

class Foo {
  public:
    Matrix M;

    Foo();
    ~Foo();
}

我想M在类内部是不可变的(内部成员函数不能改变它),但是类外部的代码应该能够不受约束地更新它,有没有办法做到这一点?

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

这似乎违反了c++原则,但我需要以某种方式绑定M到类的实例。该Matrix类型实际上是glm::mat4BTW。

回答

移动M之外Foo,然后给Fooconst指针/参照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.

以上是在C++中,如何声明一个只能在外部更改的类成员?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>