簡體   English   中英

Boost.Python:從C ++調用虛擬函數

[英]Boost.Python: Calling virtual functions from C++

我不是在尋求虛函數公開給Python的幫助,我想知道如何從C ++方面調用所述虛函數。 考慮一下...

// ====================
// C++ code
// --------------------

struct Base
{
    virtual void func() {
        cout << "Hello from C++!";
    }
};

BOOST_PYTHON_MODULE(name)
{
    // Expose the class and its virtual function here
}


// ====================
//   Python code
// --------------------

from name import Base

class Deriv(Base):
    def func():
        print('Hello from Python!')

關於如何將Base*捕獲到派生類型的任何建議,以便在執行base->func()調用Python函數? Boost文檔僅描述了如何將虛函數公開給Python,而不描述如何從C +調用其重新定義。

我認為您只是調用extract<Base*>(obj) ,其中objpython::object

您的方法不會以這種簡單的方式起作用; 您必須將包裝器添加到python類中,隨后將從該包裝器派生python類。 在這里,在1.下,我簡要解釋了它是如何工作的。 因此,要調用c ++虛擬方法的python-override,請使用get_override並使用()調用返回的對象。

對於某些代碼,請參見例如here ,其中定義了PredicatePredicateWrap ,但隨后PredicateWrap 才真正暴露給python。 調用覆蓋的方法在這里完成,但是對用戶是隱藏的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM