PyBind11中派生类无法作为基类指针参数传入函数的解决咨询
解决PyBind11中派生类无法作为基类指针参数传入的问题
问题核心是PyBind11默认不会自动识别C++类的继承关系,导致无法将派生类对象隐式转换为基类指针类型。
修改后的绑定代码
需要在绑定派生类时显式声明它与基类的继承关系,具体代码调整如下:
PYBIND11_MODULE(solver, m) { py::class_<BaseClass>(m, "BaseClass") .def(py::init()) .def("someFunc", &BaseClass::someFunc); // 关键:通过模板参数声明DerivedClass继承自BaseClass py::class_<DerivedClass, BaseClass>(m, "DerivedClass") .def(py::init()) .def("someFunc", &DerivedClass::someFunc); py::class_<OtherClass>(m, "OtherClass") .def(py::init()) .def("someCall", &OtherClass::someCall); }
原理说明
PyBind11不会自动解析C++的继承结构,必须在绑定代码中明确告知类之间的继承关系。通过py::class_<DerivedClass, BaseClass>的模板参数声明继承后,PyBind11会生成对应的类型转换逻辑,让Python中的派生类对象可以被当作基类对象传入接收基类指针的函数中。
修改后运行原Python代码,oc.someCall(dc)会正确调用DerivedClass的someFunc方法,输出derived。
内容的提问来源于stack exchange,提问作者user3071643
相关产品推荐
相关产品推荐

