我在阅读代码时注意到我有一个静态成员函数,它通过指向所述类实例的指针来改变其类的私有成员。
它编译和运行没有问题,但我只是想知道以这种方式编辑私有变量,从成员但是静态函数,或者我是否应该实现公共setVar函数。 / p>
请注意,我并不是试图通过编辑静态函数中的成员变量来绕过标准编码实践 - 该函数必须是静态的,以便可以使用POSIX pthread库作为线程运行。
干杯, 悦
答案 0 :(得分:4)
是的,这是有效的。
虽然在大多数情况下使用非静态成员会更好,但有时会在需要将函数指针传递给外部库的情况下使用静态成员,就像在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线程)也很容易。
答案 1 :(得分:0)
是。 private
表示访问仅限于该类。