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

Posted

技术标签:

【中文标题】带有默认参数的包装方法,该参数是指向另一个包装类型的空指针【英文标题】:Wrapping method with default argument that is a null pointer to another wrapped type 【发布时间】:2020-10-25 17:32:08 【问题描述】:

考虑以下 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:xxx 的初始化引发未报告的异常”*。

【问题讨论】:

【参考方案1】:

所以这很...简单,最后。只需要将空指针包装在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));

【讨论】:

以上是关于带有默认参数的包装方法,该参数是指向另一个包装类型的空指针的主要内容,如果未能解决你的问题,请参考以下文章

Pybind11 默认参数 numpy 数组或无

如何使用 SWIG 包装带有可变参数的 C 函数

为啥我们将字符串数组作为参数传递给 main() 方法,为啥不传递任何集合类型或包装类型或原始类型?

009 参数映射---基本类型和包装类型,数组

CLR via C# 笔记 -- 委托(17)

Java包装类