Да, это действительно так.
Хотя нестатический член лучше в большинстве случаев, статические члены иногда используются в тех случаях, когда вам нужно передать указатель на функцию во внешнюю библиотеку, напримерв вашем случае для библиотеки 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) без загрязнения исходного класса.