簡體   English   中英

如何使用Boost Python將Python派生類轉換為基於c ++的類?

[英]How can I upcast a Python derived class to it's c++ base with Boost Python?

我有一個帶有純虛函數的c ++類,可以使用Boost Python通過以下方式包裝它:

class Model {
    virtual double Test() = 0;
};
class ModelWrapper : public Model, public boost::python::wrapper<Model> {
    double Test() {
        return this->get_override("Test")(); 
    }     
};
BOOST_PYTHON_MODULE(mymodule)
{
    class_<ModelWrapper, boost::noncopyable>("Model")
        .def("Test, pure_virtual(&Model::Test))
    ;
}

我還有一個c ++函數,希望將Model對象作為參數:

double MyFunction(Model& m) { 
    return m.Test() 
}

現在我想做的是在Python中創建一個派生類,該派生類重寫Model :: Test函數,但仍可以傳遞給MyFunction。 像這樣:

from mymodule import *

class NewModel(Model):
    def Test(self):
        return 0.5

m = NewModel()
print(MyFunction(m))

我想在這種情況下打印出0.5。 相反,我得到這個錯誤:

> ArgumentError: Python argument types in
>     mymodule.MyFunction(NewModel) did not match C++ signature:
>     MyFunction(Model {lvalue})

我不確定要使NewModel在需要Model的地方可用,我缺少什么步驟。 任何見識將不勝感激。

我需要將'Model .__ init __(self)'添加到NewModel __init__函數中。 之后,它工作正常。

暫無
暫無

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

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