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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python封装c++_用pybind11封装C++实现的函数库

發布時間:2025/3/15 python 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python封装c++_用pybind11封装C++实现的函数库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

現有若干用C++編寫的函數,為了能夠用Python調用它們,可以通過pybind11將它們封裝到一個Python模塊中,在編寫Python程序時只要導入該模塊便能使用這些函數。

一.實現步驟

用C++函數實現函數功能;

編寫頭文件,將函數的聲明包含在頭文件中;

編寫pybind11封裝函數;

用Python編寫setup腳本;

生成動態鏈接庫pyd文件;

測試函數功能。

二.代碼實現

1.用C++函數實現函數功能

//文件名:add.cpp

extern "C" double add(double in1, double in2)

{

return in1 + in2;

}

//文件名:sub.cpp

extern "C" double sub(double in1, double in2)

{

return in1 - in2;

}

//文件名:mul.cpp

extern "C" double mul(double in1, double in2)

{

return in1 * in2;

}

//文件名:div.cpp

extern "C" double div1(double in1, double in2)

{

return in1 / in2;

}

2.編寫頭文件,將函數的聲明包含在頭文件中

//文件名:functions.h

#ifndef FUNCTIONS_H

#define FUNCTIONS_H

#include

using namespace std;

extern "C" double add(double, double);

extern "C" double sub(double, double);

extern "C" double mul(double, double);

extern "C" double div1(double, double);

#endif

3.編寫pybind11封裝函數

//文件名:functions_wrapper.cpp

#include

#include "functions.h"

namespace py = pybind11;

PYBIND11_MODULE(functions, m){

m.doc() = "Simple Class";

m.def("add", &add);

m.def("sub", &sub);

m.def("mul", &mul);

m.def("div", &div1);

}

4.用Python編寫setup腳本

#文件名:setup.py

from setuptools import setup, Extension

functions_module = Extension(

name = 'functions',

sources = ['add.cpp', 'sub.cpp', 'mul.cpp', 'div.cpp', 'functions_wrapper.cpp'],

include_dirs = [r'D:\software\pybind11-master\include',

r'D:\software\Anaconda\include']

)

setup(ext_modules = [functions_module])

5.生成動態鏈接庫pyd文件

在命令行執行python setup.py build_ext --inplace,在當前路徑下生成pyd動態庫。

6.測試函數功能

#文件名:test.py

import functions

print(functions.add(0.9, 3))

print(functions.sub(0.9, 3))

print(functions.mul(0.9, 3))

print(functions.div(0.9, 3))

output:

3.9

-2.1

2.7

0.3

總結

以上是生活随笔為你收集整理的python封装c++_用pybind11封装C++实现的函数库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。