gpt4 book ai didi

C++从静态成员函数更改私有(private)成员变量

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:58:01 26 4
gpt4 key购买 nike

我在通读我的代码时注意到我有一个静态成员函数,它通过指向所述类实例的指针更改其类的私有(private)成员。

它编译和运行没有问题,但我只是想知道以这种方式从成员但静态函数编辑私有(private)变量是否符合犹太洁食标准,或者我是否应该实现公共(public) setVar 函数。

请注意,我并不是要通过编辑静态函数的成员变量来绕过标准编码实践 - 该函数必须是静态的,以便它可以使用 POSIX pthread 库作为线程运行。

干杯,怀亚特

最佳答案

是的,这是有效的。

虽然在大多数情况下拥有非静态成员更好,但有时在需要将函数指针传递给外部库的情况下使用静态成员,例如 pthread 库的情况。

如果在其他情况下更改此私有(private)变量也是有意义的,并且如果您想将您的类与其使用 pthread 库的事实分开,您可以将类分成两部分:

  • 一个处理功能的类(就像你现在的类)
  • 一个处理与 pthread 接口(interface)的类

然后第二个类将通过公共(public)方法设置第一个类中的变量。

示例:这可能是您的原始代码:

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 线程)也很容易。

关于C++从静态成员函数更改私有(private)成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3193571/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com