我正在尝试使用boost python创建一个对象。类定义(伪代码):
class Awrap : public A, public boost::python::wrapper<A> {
static std::shared_ptr<A > Create(...) { ... } // inherited from A
virtual double foo(...) override { // overrides pure virtual function in A
return this->get_override("foo")(...);
}
};
BOOST_PYTHON_MODULE() {
using namespace boost::python
class_<Awrap,std::shared_ptr<Awrap>, boost::noncopyable>("A",boost::python::no_init)
.def("Create",&A::Create).staticmethod("Create")
.def("foo",pure_virtual(&Awrap::foo));
boost::python::register_ptr_to_python<std::shared_ptr<A> >();
}
问题是当我在python中实现子进程并调用静态create方法时,它会创建一个指向Awrap(而不是子进程)的指针。所以它找不到python实现的“foo”版本。如果我在Awrap类中实现foo而不是python child它可以正常工作,但我不想这样做!
有什么建议吗?
谢谢!
答案 0 :(得分:0)
您需要公开Awrap::foo
和A::foo
以提升python。参见以下示例:
http://www.boost.org/doc/libs/1_54_0/libs/python/doc/tutorial/doc/html/python/exposing.html