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;
我有:
所以我有一个 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;