首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pybind11中的编程绑定

pybind11中的编程绑定
EN

Stack Overflow用户
提问于 2020-10-30 22:10:54
回答 1查看 34关注 0票数 0

我正在使用pybind11将一个用c++编写的库导出为python模块。我的情况可能有点不寻常,因为c++库已经包含了我想要导出的类的所有元数据的结构。我正在考虑是否可以利用这些现有的元数据,而不是重新输入所有这些元数据来创建pybind11绑定。

正常的pybind11代码可能如下所示;

代码语言:javascript
复制
namespace py = pybind11;

PYBIND11_MODULE(pet, m) {
    py::class_<Pet>(m,"Pet")
            .def("feed", &Pet::feed, "Feed the pet")
            .def("walk", &Pet::walk, "Walk the pet");
}

我正在考虑沿着这些思路做一些事情;

代码语言:javascript
复制
namespace py = pybind11;

PYBIND11_MODULE(pet, m) {
    py::class_<Pet> pet(m,"Pet");    
    for (int i = 0; i < pet_metadata.num_funcs; i++)
    {
        auto& md = pet_metadata.func[i];
        pet.def(md.name, md.fptr, md.descr);
    }
}

做这样的事情有没有性能上的影响?我对pybind11在幕后是如何工作的没有很好的理解。每次从python调用一个绑定函数时,for循环都会运行吗?或者它们都是在编译时计算的?这种方法会奏效吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-30 22:19:11

如果深入研究这些宏,您会发现PYBIND11_MODULE扩展到了一些代码,这些代码是从Python库加载时计算出来的。对于其余部分,您的代码看起来应该可以工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64609976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档