You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 23:20:39