使用默认参数包装方法,该参数是指向另一个包装类型的空指针

Wrapping method with default argument that is a null pointer to another wrapped type

考虑以下 C++ 代码:

struct A { };

struct B {
    void f(A *a = nullptr) const;
};

如何使用 boost::python 正确包装它?特别是默认参数。以下惨败1:

bpy::class_<B>
    // Explicitly converting the nullptr to A* does not solve this:
    .def("f", &B::f, bpy::arg("a") = nullptr);

1 “惨败”,我的意思是我只得到一个“SystemError: initialization of xxx导入模块时引发未报告的异常"*。

最后,这非常……简单。只需要将空指针包装在 bpy::ptr:

bpy::class_<B>
    // The cast to A* is mandatory otherwise bpy::ptr cannot deduce the type:
    .def("f", &B::f, bpy::arg("a") = bpy::ptr((A*)nullptr));