1

我有一个带有纯虚函数的 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 处可用。任何见解将不胜感激。

4

1 回答 1

2

我需要将 'Model.__init__(self)' 显式添加到 NewModel __init__ 函数中。之后它工作得很好。

于 2014-04-17T21:51:56.883 回答