はい、これは有効です。
ほとんどの場合、非静的メンバーを使用する方が適切ですが、pthreadライブラリの場合のように、関数ポインタを外部ライブラリに渡す必要がある場合に静的メンバーが使用されることがあります。
他の状況でもこのプライベート変数を変更することが理にかなっており、クラスをpthreadライブラリを使用するという事実から分離したい場合は、クラスを2つに分割できます。
- 機能を処理する1つのクラス(現在のクラスのように)
- pthreadへのインターフェースを処理する1つのクラス
次に、2番目のクラスは、パブリックメソッドを介して最初のクラスに変数を設定します。
例:これはおそらく元のコードです:
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スレッドなど)を簡単に追加することもできます。