[英]C++ alter private member variable from static member function
我注意到在閱讀我的代碼時,我有一個靜態成員函數,它通過指向所述類實例的指針來改變其類的私有成員。
它編譯和功能沒有問題,但我只是想知道以這種方式編輯私有變量,從成員但是靜態函數,或者如果我應該實現公共setVar函數是猶太的。
請注意,我不是試圖通過編輯靜態函數中的成員變量來繞過標准編碼實踐 - 該函數必須是靜態的,以便它可以使用POSIX 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.