Boost.Python:回调类函数

时间:2011-08-01 13:30:15

标签: c++ python boost

我有一个用C ++编写的EventManager类,并且暴露给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

add-remove-作为EventManager的静态函数公开。)

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

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

1 个答案:

答案 0 :(得分:0)

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