c – Boost.Python:回调类函数

我有一个用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的引用计数,这将阻止它被删除,所以析构函数永远不会被调用,所以事件处理程序永远不会被删除(除了应用程序的结尾).

代码适用于没有自变量(即自由或静态功能)的函数.我应该如何捕获Python函数对象,这样我不会增加引用计数?我只需要对对象的弱引用.

解决方法

没有weakref.ref(self.onFooEvent),你永远不会得到你的预期行为!看我的评论

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...