首页 > 解决方案 > 在 C++ 中,如何声明一个只能在外部更改的类成员?

问题描述

我有这样的课

class Foo {
  public:
    Matrix M;

    Foo();
    ~Foo();
}

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

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

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

标签: c++

解决方案


移出MFoo然后给出指向Fooconst指针/引用M,例如:

Matrix M;

class Foo {
  public:
    const Matrix &Mref;

    Foo() : Mref(M) {}
    ~Foo();
};

推荐阅读