簡體   English   中英

在 C++ 中,如何聲明一個只能在外部更改的 class 成員?

[英]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一個指向Mconst指針/引用,例如:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM