日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pybind11简单使用

發(fā)布時間:2024/4/18 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pybind11简单使用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

https://sanzo.top/Default/pybind11

pybind11介紹

github.com/pybind/pybind11

使用pybind11可以將C++庫綁定到Python,即在Python內(nèi)調(diào)用C++代碼,同樣也可以在C++中調(diào)用Python代碼。

編譯安裝

# install pytest pip install pytest# install pybind11 git clone https://github.com/pybind/pybind11.git cd pybind11 && mkdir build && cd build cmake .. && make && sudo make install

接下來使用pybind11演示下如何實現(xiàn)C++調(diào)用Python,以及C++調(diào)用Python。

Python調(diào)用C++

#include <pybind11/pybind11.h>/***********************調(diào)用普通函數(shù)***********************/ template <typename T> T add(T a, T b) {return a + b; }PYBIND11_MODULE(pyadd, m) {m.doc() = "test for add()";m.def("add", &add<int>, "add two number.");m.def("add", &add<double>, "add two number.");m.def("add", &add<long long>, "add two number.");m.attr("__version__") = "dev";/*** >>> import pyadd* >>> pyadd.__version__* 'dev' * >>> pyadd.add(1.1, 2.2) * 3.3000000000000003 */ }/***********************調(diào)用類***********************/ namespace test_class { class Person { public:Person() {name = "Sanzo";age = 21;}Person(std::string name, int age) {this->name = name;this->age = age;}std::string getName() {return this->name;}void setName(std::string name) {this->name = name;}int getAge() {return age;}std::string name;private:int age; }; }PYBIND11_MODULE(test_class, m) {m.doc() = "test_class::person";pybind11::class_<test_class::Person>(m, "Person").def(pybind11::init()).def(pybind11::init<std::string, int>()).def("getAge", &test_class::Person::getAge).def("getName", &test_class::Person::getName).def("setName", &test_class::Person::setName).def_readwrite("name", &test_class::Person::name);/*>>> a = test_class.Person()>>> a.getName()'Sanzo'>>> a.getAge()21>>> a.setName("Sanzo00")>>> a.getName()'Sanzo00'>>> b = test_class.Person("Sazo00", 21)>>> b.getName()'Sazo00'>>> b.getAge()21 */ }/***********************調(diào)用stl***********************/ #include <pybind11/stl.h>void printV(std::vector<int> &v) {for (auto &it : v) {std::cout << it << " ";}std::cout << std::endl; }PYBIND11_MODULE(stl, m) {m.doc() = "test for stl.";m.def("printV", &printV);/*>>> import stl>>> stl.printV([1, 2, 3, 4])1 2 3 4 */ } // file name: CMakeLists.txt cmake_minimum_required(VERSION 3.5) project(test_pybind) add_subdirectory(pybind11) pybind11_add_module(pyadd py_call_cpp.cc) pybind11_add_module(test_class py_call_cpp.cc) pybind11_add_module(stl py_call_cpp.cc)

C++調(diào)用Python

// file name: cpp_call_py.ccc #include <iostream> #include <pybind11/pybind11.h> #include <pybind11/embed.h>namespace py = pybind11;int main() {py::scoped_interpreter python;py::module t = py::module::import("test_add");auto result = t.attr("add")(1, 2);int sum = result.cast<int>();std::cout << "sum = " << sum << std::endl;return 0; }/*vim ~/.bashrc # 將工作目錄添加到環(huán)境變量中export PYTHONPATH=/home/ubuntu/test_pybind:$PATH */ // file name: test_add.py def add(a, b):print(f"add({a}, {b})")return a + b // file name: CMakeLists.txt cmake_minimum_required(VERSION 3.5) project(test_pybind) add_subdirectory(pybind11)add_executable(cpp_call_py cpp_call_py.cc test_add.py)target_include_directories(cpp_call_pyPUBLIC/usr/include/python3.8 )target_link_libraries(cpp_call_pyPUBLIC/home/ubuntu/miniconda3/lib/libpython3.8.so )

注意

  • 需要將pybind11放到工作目錄下
  • C++調(diào)用python時,需要將當前工作目錄添加到環(huán)境變量PYTHONPATH中,這樣python就可以找到自定義的包。
  • 總結(jié)

    以上是生活随笔為你收集整理的pybind11简单使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 91精品91久久久中77777 | 亚洲成人av免费观看 | 草莓巧克力香氛动漫的观看方法 | www.欧美在线观看 | 古装三级吃奶做爰 | 国产免费毛卡片 | 欧美黄色a级 | 超碰人人擦| 欧美成人一区在线观看 | 韩国三级中文字幕hd久久精品 | 精品久久久在线观看 | 色欧美综合 | 亚洲一区二区网站 | 亚洲一区二区美女 | 情侣自拍av | 亚州精品国产精品乱码不99按摩 | 午夜一区在线观看 | 精品国产无码在线 | www.天堂av | 欧美激情在线观看视频 | 久草视频精品在线 | 美国免费黄色片 | 风间由美在线观看 | 91情侣视频 | 激情一区| 人操人| 极品少妇在线观看 | 91碰碰| 色黄视频在线观看 | 经典三级在线视频 | 日本变态折磨凌虐bdsm在线 | а√天堂www在线天堂小说 | 91麻豆精品在线观看 | 色污网站 | 日韩人妻无码精品综合区 | 国产欧美大片 | 亚洲色图校园春色 | 亚洲六月丁香色婷婷综合久久 | 欧美一区二区三区免费 | 亚洲无人禁区 | 国产精品一线二线 | 99久久久国产精品 | 午夜影院在线视频 | 国产精品九九九九 | 男人和女人做爽爽视频 | 国产精品国产三级国产aⅴ9色 | 天天看天天摸天天操 | 日日操夜夜爽 | 免费日韩| 国产精品三区在线观看 | 四虎一区二区三区 | 一区三区视频 | 久久久精品影院 | 在线一区二区三区视频 | 天天干天天日 | 中文字幕av一区二区三区 | 日本三级中文字幕在线观看 | 潘金莲性xxxxhd | 婷婷五月综合激情 | 亚洲麻豆一区 | av站| 国产午夜视频在线观看 | 天堂成人在线观看 | 亚洲网站在线播放 | 一本大道综合伊人精品热热 | 午夜色网| 国产无遮挡又黄又爽 | 亚洲人毛茸茸 | 欧美性狂猛xxxxxbbbbb | 一本色道久久88亚洲精品综合 | 91激情影院 | 色哟哟视频在线观看 | 麻豆视频在线免费看 | 老色鬼av | 久久精品人人 | 亚洲天堂日韩在线 | 久久久精品国产 | 国产亚洲综合在线 | 黄网www | 欧美成人做爰猛烈床戏 | 亚洲精品久久久久久久久 | 国产一区二区三区在线免费观看 | av片网 | 久久亚洲AV成人无码一二三 | 极品销魂美女少妇尤物 | 午夜剧场福利 | 精品国产精品国产偷麻豆 | 天堂中文在线观看视频 | 日韩精品一卡二卡 | 五月婷婷丁香 | 韩国主播青草55部完整 | 黄色理伦片 | 久久久夜色精品亚洲 | 日本不卡视频一区二区 | 国产精品激情偷乱一区二区∴ | 国产理论影院 | 久久亚洲a v| 国产成人自拍视频在线观看 | 国产福利午夜 |