从静态方法访问对象的属性
Access properties of object from static method
我正在针对需要静态回调函数的外部库进行编程。我将我的回调声明为静态的,但随后我失去了对要使用此回调修改的对象属性的访问权限。
.h
static void selCallback(void* userData, SoPath* selPath);
.cpp
void MyClass::selCallback(void* userData, SoPath* selPath) {
classProperty = 3;
}
有没有办法在能够访问我当前对象属性的同时创建静态回调?我使用的库是 openInventor 库。使用以下代码完成回调连接:
SoSelection *selNode = new SoSelection;
selNode->addSelectionCallback(MyClass::selCallback);
通常在某些地方可以指定 void* userData
,无论是在创建库对象时还是在注册回调时。您可以将其设置为指向您要从回调中访问的对象的指针。然后在回调中,您将 void*
指针转换回指向您的 class 的指针并通过它进行操作。
这样你就不能使用 C++ 智能指针,所以你必须自己处理对象生命周期。
addSelectionCallback 方法有一个可选参数 userData
指针。在那里您应该发送对象实例,然后您将在回调中收到它。
在方法内部,您可以类型转换为正确的对象类型并使用对象实例进行实际工作。
例如:
void MyClass::selCallback(void* userData, SoPath* selPath) {
static_cast<MyClass *>(userData)->classProperty = 3;
}
MyClass myInstance;
selNode->addSelectionCallback(MyClass::selCallback, &myInstance);
我正在针对需要静态回调函数的外部库进行编程。我将我的回调声明为静态的,但随后我失去了对要使用此回调修改的对象属性的访问权限。
.h
static void selCallback(void* userData, SoPath* selPath);
.cpp
void MyClass::selCallback(void* userData, SoPath* selPath) {
classProperty = 3;
}
有没有办法在能够访问我当前对象属性的同时创建静态回调?我使用的库是 openInventor 库。使用以下代码完成回调连接:
SoSelection *selNode = new SoSelection;
selNode->addSelectionCallback(MyClass::selCallback);
通常在某些地方可以指定 void* userData
,无论是在创建库对象时还是在注册回调时。您可以将其设置为指向您要从回调中访问的对象的指针。然后在回调中,您将 void*
指针转换回指向您的 class 的指针并通过它进行操作。
这样你就不能使用 C++ 智能指针,所以你必须自己处理对象生命周期。
addSelectionCallback 方法有一个可选参数 userData
指针。在那里您应该发送对象实例,然后您将在回调中收到它。
在方法内部,您可以类型转换为正确的对象类型并使用对象实例进行实际工作。
例如:
void MyClass::selCallback(void* userData, SoPath* selPath) {
static_cast<MyClass *>(userData)->classProperty = 3;
}
MyClass myInstance;
selNode->addSelectionCallback(MyClass::selCallback, &myInstance);