簡體   English   中英

C ++改變靜態成員函數的私有成員變量

[英]C++ alter private member variable from static member function

我注意到在閱讀我的代碼時,我有一個靜態成員函數,它通過指向所述類實例的指針來改變其類的私有成員。

它編譯和功能沒有問題,但我只是想知道以這種方式編輯私有變量,從成員但是靜態函數,或者如果我應該實現公共setVar函數是猶太的。

請注意,我不是試圖通過編輯靜態函數中的成員變量來繞過標准編碼實踐 - 該函數必須是靜態的,以便它可以使用POSIX pthread庫作為線程運行。

歡呼,懷亞特

是的,這是有效的。

雖然在大多數情況下擁有非靜態成員會更好,但有時會在需要將函數指針傳遞給外部庫的情況下使用靜態成員,就像在pthread庫中一樣。

如果在其他情況下更改此私有變量也是有意義的,並且如果要將類與使用pthread庫的事實分開,則可以將該類拆分為兩個:

  • 一個處理功能的類(現在就像你的類一樣)
  • 一個類處理與pthread的接口

然后,第二個類將通過公共方法在第一個類中設置變量。

示例:這可能是您的原始代碼:

class MyClass
   {
   public:
      static void someMethod(MyClass *);
   private:
      type myMember;
   };

這就是你怎么寫的:

 class MyClass
    {
    public:
       void setMember(type value) {myMember = value; /* other other logic */}
    private:
       type myMember;
    }

 class MyClassPThreadInterface
    {
    public:
       static void someMethod(MyClass *myclass) {myclass->...();}
    }

這樣,您就可以完全將您的類與PThread庫使用它的事實分開。 它也可以在其他情況下使用(靜態方法相當無意義),並且在不污染原始類的情況下添加另一個線程庫(例如Windows線程)也很容易。

是。 private表示訪問僅限於該類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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