pybind11基本用法

 


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'
复制代码

 

posted @   夏蝉沐雪  阅读(1852)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示