提振.Python:类函数的回调
Boost.Python: Callbacks to class functions
我有一个用c++编写并暴露于Python的EventManager
类。这是我打算在Python端使用它的方式:
class Something:
def __init__(self):
EventManager.addEventHandler(FooEvent, self.onFooEvent)
def __del__(self):
EventManager.removeEventHandler(FooEvent, self.onFooEvent)
def onFooEvent(self, event):
pass
(add-
和remove-
暴露为EventManager
的静态函数)
上面代码的问题是回调是在boost::python::object
实例中捕获的;当我执行self.onFooEvent
时,这些将增加self
的引用计数,这将阻止它被删除,因此析构函数永远不会被调用,因此事件处理程序永远不会被删除(除非在应用程序的末尾)。
对于没有self
参数的函数(即自由函数或静态函数),代码可以很好地工作。我应该如何捕获Python函数对象,这样我就不会增加它们的引用计数?我只需要对对象的弱引用
如果没有weakref.ref(self.onFooEvent),您将永远无法获得预期的行为!
相关文章:
- 处理类内的回调时,必须调用对非静态成员函数的引用
- 类 Referention 中C++回调函数引用非静态函数
- 如何将派生类中的成员函数作为回调传递?
- 重写另一个方法 [C++] 使用的超类回调函数
- C++带有回调函数的模板类
- 在类中设置 PubSubClient API 的回调函数
- 将回调函数打包到模板化类中
- 如何设置对类的私有函数的函数回调?
- 是否可以使用包含{sub,super}类函数指针的回调表
- 如何在类中使用WINAPI函数(不是回调)?
- 将函数模板定义为类模板的回调
- 访问作为WiFi侦听器回调成员函数一部分的类的成员
- C++模板化的回调反弹函数
- C++来自不同类的多个回调成员函数,而无需 std 和 boost
- websockettpp回调(通过函数指针的Class方法)
- 在不使用mex的情况下,将C++回调作为函数句柄传递给matlab引擎
- 调用C#中包含回调的C++函数
- 指向SDL音频回调成员函数的指针
- 使用libevent回调成员函数
- c++与c#的互操作,传递回调给c++函数