我正在尝试使用Boost.Python将我的C++类公开给Python.这是我正在尝试做的简化版本:
我有一个派生自boost :: noncopyable的类A和一个带有一个方法的类B,该方法将A作为参数引用.
class A : boost::noncopyable { /*...*/ };
class B {
public:
virtual void do_something(A& a) {
/*...*/
}
};
Run Code Online (Sandbox Code Playgroud)
我正在公开课程如下:
/* Wrapper for B, so B can be extended in python */
struct BWrap : public B, wrapper<B> {
void do_something(A &a) {
if (override do_something = this->get_override("do_something")) {
do_something(a);
return;
}
else {
B::do_something(a);
}
}
void default_do_something(A& a) { this->B::do_something(a); }
};
BOOST_PYTHON_MODULE(SomeModule) {
class_<A, boost::noncopyable>("A");
class_<BWrap, boost::noncopyable>("B")
.def("do_something", &B::do_something, &BWrap::default_do_something)
;
}
Run Code Online (Sandbox Code Playgroud)
我像这样在python中扩展B: …