pybind11 的基本用法
最编程
2024-07-15 09:52:49
...
1、头文件和命名空间约定
#include <pybind11/pybind11.h>
namespace py = pybind11;
2、函数绑定
`PYBIND11_MODULE`会创建一个函数,它在Python中使用`import`语句时被调用。宏的第一个参数是模块名(example),不使用引号包住;第二个参数是类型为`py::module_`的变量(m),它是创建绑定的主要接口。`module_::def()`方法,则会生成add函数的Python绑定代码。
#include <pybind11/pybind11.h> int add(int i, int j) { return i + j; } PYBIND11_MODULE(example, m) { m.doc() = "pybind11 example plugin"; // optional module docstring m.def("add", &add, "A function which adds two numbers"); }
python
>>> import example
>>> example.add(1, 2)
3、关键字参数
arg是可用于将元数据传递到module::def()的几个特殊标记类之一。使用后可以在调用函数时使用关键字参数,以增加代码可读性,特别是对那些带有多个参数的函数。后缀`_a`会生成一个等价于`arg`方法的字面量。
m.def("add", &add, "A function which adds two numbers", py::arg("i"), py::arg("j")); //m.def("add2", &add, "i"_a, "j"_a); 简短写法 python import example example.add(i=1, j=2)
4、默认参数
pybind11不能自动地提取默认参数,因为它不属于函数类型信息的一部分。我们需要借助`arg`来实现这一功能:
int add(int i = 1, int j = 2) { return i + j; } m.def("add", &add, "A function which adds two numbers", py::arg("i") = 1, py::arg("j") = 2);
5、导出变量
使用`attr`函数来注册需要导出到Python模块中的C++变量
PYBIND11_MODULE(example, m) { m.attr("the_answer") = 42; py::object world = py::cast("World"); m.attr("what") = world; } pyhton >>> import example >>> example.the_answer 42 >>> example.what 'World'
推荐阅读
-
JS、数组]平面数组的基本用法
-
TensorFlow 的基本概念和使用场景
-
Golang 并发编程入门:Goroutine 简介和基本用法
-
LeetCode] 动态编程 - 95.动态编程 - 95.不同的二叉搜索树 II(附完整 Python/C++ 代码) - 基本思想
-
阅读周 - 你所不知道的 JavaScript | 深入编程从熟悉基本编程概念开始
-
Java HashMap 的数据结构和基本原理及其在 Jdk8、Jdk11 和 Jdk17 中的一些变化,以及一些常见问题。
-
[C++] 红黑树的实现:原则和基本分析 - 红黑树概念
-
Flume 面试组织者 - Flume 的基本架构
-
Spring Boot 异步任务、任务调度和异步请求线程池的用法和原理
-
Conda 的基本使用 - 13.常见问题