C++ - 如何从 class 的静态函数访问 class 的私有成员?

C++ - How to access private members of a class, from a static function of the same class?

我有:

所以我有一个 class,它有一个私有成员和一个静态函数。 该函数必须是静态的,我无法更改它。

我想要的:

我需要从静态函数访问私有成员。 有任何想法吗? :)

请检查以下代码:

class Base
{
private:
   int m_member;
public:
   Base() : m_member(0) {};
   ~Base() {};

   static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode); /* This must really be static because it is coming from C */
};

void Base::key_callback(GLFWwindow* window, int key, int scancode, int action, int mode)
{
    m_member = 1; // <---- illegal reference to non-static member 'Base::m_member'
}

你不能。您需要一个实例才能访问非静态私有。在静态方法中,您没有可用的实例。

所以你需要一些方法来获取实例,要么将它传递给静态方法,要么能够从其他地方获取它。但在那种情况下,您也可以将其设为非静态方法。

static 成员函数无法访问非 static 成员(除非它创建自己的本地实例,非 static 成员将属于)。

这是因为非static成员属于class的实例,而static成员不属于。想一想:如果你写了

Base::callback(...);

这应该访问什么m_member?根本没有 Base 的实例,因此没有 m_member.

静态成员函数是 class 的一部分,没有与之关联的对象实例(换句话说,没有 this 指针静态成员函数)。为了能够访问非静态成员变量,您需要 class.

的实际实例

使用旧 C 库设置回调时的一个常见解决方案是使用某种用户数据指针,并将其分配给 class 的实例。幸运的是,GLFW 库 have such a pointer that you can use.

你可以m_member

static int m_member;