繁体   English   中英

Boost.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)你永远不会得到你预期的行为! 看我的评论。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM