簡體   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