c – Boost.Python:回调类函数

前端之家收集整理的这篇文章主要介绍了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&C++相关文章