欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

怎么使用pybind11封裝C++結構體作為參數(shù)的函數(shù)-創(chuàng)新互聯(lián)

這篇文章主要介紹怎么使用pybind11封裝C++結構體作為參數(shù)的函數(shù),文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

成都網(wǎng)站制作、成都做網(wǎng)站、外貿營銷網(wǎng)站建設服務團隊是一支充滿著熱情的團隊,執(zhí)著、敏銳、追求更好,是創(chuàng)新互聯(lián)的標準與要求,同時竭誠為客戶提供服務是我們的理念。創(chuàng)新互聯(lián)建站把每個網(wǎng)站當做一個產品來開發(fā),精雕細琢,追求一名工匠心中的細致,我們更用心!

python調用C/C++有不少的方法,如boost.python, swig, ctypes, pybind11等,這些方法有繁有簡,而pybind11的優(yōu)點是對C++ 11支持很好,API比較簡單,現(xiàn)在我們就簡單記下Pybind11的入門操作。

pybind11簡介

pybind11是一個輕量級的只包含頭文件的庫,它主要是用來在已有的 C++代碼的基礎上做擴展,它的語法和目標非常像Boost.Python,但Boost.Python為了兼容現(xiàn)有的基本所有的C++編譯器而變得非常復雜和龐大,而因此付出的代價是很多晦澀的模板技巧以及很多不必要的對舊版編譯器的支持。Pybind11摒棄了這些支持,它只支持python2.7以上以及C++ 11以上的編譯器,使得它比Boost.Python更加簡潔高效。

在C語言中,結構體(struct)指的是一種數(shù)據(jù)結構,是C語言中聚合數(shù)據(jù)類型(aggregate data type)的一類。結構體可以被聲明為變量、指針或數(shù)組等,用以實現(xiàn)較復雜的數(shù)據(jù)結構。結構體同時也是一些元素的集合,這些元素稱為結構體的成員(member),且這些成員可以為不同的類型,成員一般用名字訪問。

結構體、結構體指針作為函數(shù)的參數(shù)應用的非常廣泛,本文介紹如何使用pybind11封裝C++結構體作為參數(shù)的函數(shù)。

一.需求分析

  • 現(xiàn)有名為 student 的結構體,有5個成員變量 name,Chinese,Mathematics,English和total ,構造函數(shù)通過name生成實例,成員函數(shù) setName 可以給實例的name賦值;

  • calc 函數(shù)接收一個student實例作為參數(shù),通過三門課程的分數(shù)計算出總分 total ;

  • 將student,calc封裝到包含一個student類和一個calc函數(shù)的python模塊( abctest )中。

二.實現(xiàn)步驟

  1. 在頭文件中定義student結構體,并聲明calc函數(shù);

  2. 在C++源文件中實現(xiàn)func.cpp函數(shù);

  3. 編寫pybind11封裝函數(shù);

  4. 用python編寫setup腳本;

  5. 編譯生成動態(tài)鏈接庫;

  6. 測試函數(shù)功能。

三.代碼實現(xiàn)

在頭文件中定義student結構體,并聲明calc函數(shù)

//文件名:whjy.h
#include <string> 
using namespace std; 
struct student{ 
 string name; 
 int Chinese; 
 int Mathematics; 
 int English; 
 int total; 
 student(string n){ 
 this->name = n; 
 } 
 void setName(string stuName){ 
  this->name = stuName; 
 } 
}; 
void calc(struct student&);

在C++源文件中實現(xiàn)func.cpp函數(shù)

//文件名:func.cpp
#include "whjy.h" 
#include <string> 
void calc(struct student& tyh){ 
 tyh.total = tyh.Chinese + tyh.Mathematics + tyh.English; 
}

編寫pybind11封裝函數(shù)

//文件名:func_wrapper.cpp
#include <pybind11/pybind11.h> 
#include "whjy.h" 
namespace py = pybind11; 
PYBIND11_MODULE(abctest, m){ 
 m.doc() = "simple example"; 
 
 py::class_<student>(m, "student") 
  .def(py::init<string>()) 
  .def("setName", &student::setName) 
  .def_readonly("name", &student::name) 
  .def_readwrite("Chinese", &student::Chinese) 
  .def_readwrite("Mathematics", &student::Mathematics) 
  .def_readwrite("English", &student::English) 
  .def_readwrite("total", &student::total); 
 m.def("calc", &calc); 
}

用python編寫setup腳本

#文件名:setup.py
from setuptools import setup, Extension 
 
functions_module = Extension( 
 name = 'abctest', 
 sources = ['func.cpp', 'func_wrapper.cpp'], 
 include_dirs = [r'D:\software\pybind11-master\include', 
     r'D:\software\Anaconda\include'] 
) 
 
setup(ext_modules = [functions_module])

編譯生成動態(tài)鏈接庫

在命令行執(zhí)行python setup.py build_ext --inplace,在當前路徑下生成pyd動態(tài)庫。

測試函數(shù)功能

#文件名:test.py
import abctest 
s = abctest.student("小明") 
s.Chinese = 100 
s.Mathematics = 110 
s.English =120 
abctest.calc(s) 
print(s.name + ":" + str(s.total) + "分") 
print("----------------------") 
s.setName("小紅") 
print(s.name + ":" + str(s.total) + "分")

output:
小明:330分
----------------------
小紅:330分

以上是“怎么使用pybind11封裝C++結構體作為參數(shù)的函數(shù)”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注創(chuàng)新互聯(lián)網(wǎng)站建設公司行業(yè)資訊頻道!

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)建站aaarwkj.com,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

當前標題:怎么使用pybind11封裝C++結構體作為參數(shù)的函數(shù)-創(chuàng)新互聯(lián)
文章源于:http://aaarwkj.com/article24/iceje.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供關鍵詞優(yōu)化、外貿建站、網(wǎng)站改版用戶體驗、云服務器、電子商務

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

外貿網(wǎng)站建設
欧美精品熟妇乱黑人最大| 日韩国产欧美一区二区在线视频| 国内精品偷拍一区二区三区| 中文乱幕亚洲无套内射| 午夜福利尤物一区二区| 蜜桃少妇人妻一区二区视频| 在线观看国产小视频不卡| 免费在线免费观看av| 9热在线视频精品这里只有| 亚洲桃色一区二区三区四区| 69久久精品费精品国产| 欧美日韩一区二区三区色拉拉| 午夜日本大胆裸体艺术| 久久亚洲天堂av丁香| 国产欧美日韩经典一区| 久草福利视频免费播放| 中文字幕在线不卡精品视频| 嫩草网站国产精品一区二| 亚洲男人天堂在线观看| 日韩美女毛片啪啪响| 久久96国产精品久久秘臀| 亚洲av日韩精品久久久| 国产亚洲精品一区久久| av一区二区中文字幕| 午夜丁香婷婷爽少妇av| 久久婷婷综合激情亚洲| 粉嫩极品美女国产精品| 国产精品情侣av自拍| 国产丝袜美腿诱惑久久| 免费观看日本成人午夜大片| 久久精品亚洲毛片美女极品| 日韩爱视频一区二区| 调教亚洲另类唯美第二页| 国产精品三级竹菊影视| 日韩国产精品激情一区| 人妻日韩字幕一区二区| 美女黄色午夜福利网站| 亚洲精品中文字幕日本乱码| 一区二区在线视频免费播放| 久久亚洲中文字幕精品熟女一区| 神马久久午夜免费福利|