#5271·pybind11

[BUG]: templated 构造函数的 implicitly_convertible

作者: jeanchristopheruel创建于 2024年7月26日更新于 2026年6月23日
标签triage

The Python binding:

cpp
PYBIND11_MODULE(example, m) {
    py::class_<A>(m, "A")
        .def("print", &A::print);

    py::class_<B>(m, "B")
        .def(py::init<>())
        .def("print", &B::print);

    py::class_<C>(m, "C")
        .def(py::init<>())
        .def("print", &C::print);

    py::implicitly_convertible<B, A>();
    py::implicitly_convertible<C, A>();

    m.def("print", &print);
}

I would expect the Python binding to behave like:

python
import example
b = example.B()
print_from_b = example.print(b)  # This should print "I am B" due to implicit conversion
c = example.C()
print_from_c = example.print(c)  # This should print "I am C" due to implicit conversion

内容来源: pybind/pybind11