Boost.Python:回调类函数

Pau*_*nta 10 c++ python boost

我有一个EventManager用C++编写并暴露给Python的类.这就是我打算从Python端使用它的方式:

class Something:
    def __init__(self):
        EventManager.addEventHandler(FooEvent, self.onFooEvent)
    def __del__(self):
        EventManager.removeEventHandler(FooEvent, self.onFooEvent)
    def onFooEvent(self, event):
        pass
Run Code Online (Sandbox Code Playgroud)

(add-remove-作为静态函数公开EventManager.)

上面代码的问题是回调是在boost::python::object实例中捕获的; 当我这样做时self.onFooEvent会增加引用计数self,这将阻止它被删除,因此析构函数永远不会被调用,因此事件处理程序永远不会被删除(除非在应用程序结束时).

该代码适用于没有self参数的函数(即自由或静态函数).我应该如何捕获Python函数对象,以便我不会增加它们的引用计数?我只需要对对象的弱引用.

Nic*_*alu 0

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