c++ - 在 C++ 中,如何声明一个只能在外部更改的类成员?
问题描述
我有这样的课
class Foo {
public:
Matrix M;
Foo();
~Foo();
}
我想M
在类内部是不可变的(内部成员函数不能改变它),但是类外部的代码应该能够不受约束地更新它,有没有办法做到这一点?
一点背景知识:我正在开发一个 OpenGL 应用程序,其中我有一个Mesh
包含所有顶点/纹理数据并且可以Draw()
按需提供的类。我意识到观察矩阵和投影矩阵对于场景来说是全局的,而模型矩阵M
对于每个网格来说都是局部的,所以我声明M
为Mesh
类的公共成员,它被初始化为单位矩阵。类外的调用者应更新M
每一帧以进行转换。但是,我不希望它在课堂上被意外更改。希望这是有道理的。
这似乎违反了c++
原则,但我需要以某种方式绑定M
到类的一个实例。Matrix
类型实际上是顺便glm::mat4
说一句。
解决方案
移出M
,Foo
然后给出指向Foo
的const
指针/引用M
,例如:
Matrix M;
class Foo {
public:
const Matrix &Mref;
Foo() : Mref(M) {}
~Foo();
};
推荐阅读
- asp.net - asp-page 路由未将 url 呈现到管理子文件夹
- kubernetes - 由于证书问题,无法启动通过 helm 部署的 kubernetes 仪表板
- vert.x - Vertx 请求不会在 sendFile 抛出时结束
- optaplanner - 在 optaplanner 中计划一个考虑休息时间的时间表
- c# - 如何在列表中单独查找实例化对象的组件的状态
- java - Optaplanner Joiners.equal 不使用 .equals?
- spring-boot - Spring Boot 应用程序中的端口 443 构建失败
- python-3.x - 如何使用 selenium 在网络爬虫中捕获图像和表情符号
- reactjs - 如何使用 reactJS 在 Excel 中设置单元格数据验证
- spring-boot - intellij 显示“无法自动接线。找不到 'JavaMailSender' 类型的 bean。” 虽然代码仍然正确运行