[英]In C++, how to declare a class member that can only be changed externally?
我有一個像這樣的 class
class Foo {
public:
Matrix M;
Foo();
~Foo();
}
我希望M
在 class 內部是不可變的(內部成員函數無法更改它),但是 class 外部的代碼應該能夠不受限制地更新它,有沒有辦法這樣做?
一點背景知識:我正在開發一個 OpenGL 應用程序,其中我有一個Mesh
class 保存所有頂點/紋理數據並且可以按需Draw()
。 我意識到觀察矩陣和投影矩陣對於場景來說是全局的,而 model 矩陣M
對於每個網格都是局部的,所以我將M
聲明為網格 class 的公共成員,該Mesh
初始化為單位矩陣。 class 之外的調用者應該每幀更新M
以進行轉換。 但是,我不希望它在 class 中被意外更改。 希望這是有道理的。
這似乎違反了c++
原則,但我需要以某種方式將M
綁定到 class 的實例。 Matrix
類型實際上是glm::mat4
順便說一句。
將M
移到Foo
之外,然后給Foo
一個指向M
的const
指針/引用,例如:
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();
}
將Foo
中的所有操作都包含在const
函數中,但將M
本身暴露給外部世界。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.