Python生成C++类工具

用cython将python程序打包成C++动态库(windows+Vistual Studio2017平台) 作为一名程序员我们都知道Python的库可能要比C++的丰富的多特别是在算法方面,但是有的时候我们的工程是用C++开发的,我们又像用Python的这个库那怎么办呢?如果直接调.py程序,工程中代码有.py又有.cpp显得工程很杂乱。那么我么可以借助cython来帮助我们将python程序封装成C++动态库。最近正好用到jieba分词工具,接下来让我们基于结巴一起探讨如何完成python程序封装成C++库。 阅读详情

以下为授权转载的一盎司科技公众号文章


Python除了编写脚本非常方便,制作界面小工具也很快捷,这里使用PySide6制作一个自动生成C++类的小工具。后续考虑使用之前开源的PySideFrameless项目来改造,提升美观度。

示例代码地址:

GitHub地址:https://github.com/iounce/python-cpp-demo

Gitee地址:https://gitee.com/iounce_admin/python-cpp-demo

环境

  • Windows操作系统:Windows10(21H2,19044.1766)

  • C++开发环境:Visual Studio 2022社区版

  • Python:3.10.4

编写界面

PySide6制作界面,可以使用界面设计工具来设计布局,然后编译成Python文件来使用。同时,也可以纯代码的方式来实现布局,这样就无需依赖其他外部文件。两者各有优劣,可根据需要选择,此处选择手动编码实现。

首先定义自定义类MainWindow,继承自QtWidgets.QMainWindow,然后添加一个空组件设置为主界面的中心控件,接着在中心控件设计布局。

界面布局

布局主要由QGridLayout,QHBoxLayout来实现,这里将主界面水平分割为三块,第一块self.layout_class为C++类和文件名所在行;第二块self.layout_func为类的成员函数相关内容(返回值,函数名,入参等)所在的行;第三块self.layout_result为结果列表所在的行。

图片

初始化控件

接着,对每一块水平布局进一步细化,增加标签,输入框等控件,完善界面细节。其中,init_class()实现类名,文件名等控件的初始化;init_func()实现函数定义相关控件的初始化;init_result()则实现结果列表控件等的初始化;init_tab_order()则设置控件的tab顺序,方便通过tab键来切换控件。

图片

图片

图片

增加响应函数

在点击界面控件的时候,需要绑定对应的响应函数,这样才会响应点击的操作,其中on_add_func()是点击添加函数按钮的响应,on_sub_func()是减少函数按钮的响应,on_gen_cpp()是生成C++相关文件按钮的响应。

图片

图片

增加消息过滤

消息过滤主要是为了当输入完C++类名后自动生成C++文件名,譬如输入类名MyClass,则自动生成MyClass.cpp。

图片

图片

效果展示

图片

说明:

  1. 项目文件包含main.spec文件,可以通过安装PyInstaller将Python文件打包为exe文件;

  2. 项目文件包含setup.iss文件,可修改相关路径,实现将exe文件及其依赖文件打包为安装文件,然后可以在其他机器安装。

C++和Python的交互 一般的,Python和C++的交互分为这两种情况: 用C++扩展Python:当一个Python项目中出现了性能瓶颈时,将瓶颈部分抽离出来,用C++封装成一个Python可以调用的模块(so库); 将Python内嵌入C++:当一个C++项目中有部分功能预期将会经常变更需求,期望获得更高的灵活性时,将这部分功能用Python实现,在C++中进行调用。 这篇文章将简单介绍下第一部分的一种做法。 Bo... 阅读详情

相关推荐

Python 自动生成 C++ 代码 - 自动化生成 C++ 代码的实现

使用以上的代码,我们可以轻松地根据用户输入自动生成对应的 C++ 代码。这种自动化生成代码的方法可以大大提高开发效率,减少编码工作量,并避免手动编写代码可能导致的错误。接下来,我们可以通过 Python 代码读取用户输入,获取所需的代码信息,比如需要生成的类名、成员函数等。然后,使用 Jinja2 模板引擎将这些信息插入到代码模板中,生成最终的 C++ 代码。接下来,我们可以创建一个 C++ 代码模板,作为自动生成的基础。这个模板可以包含一些预定义的代码结构,我们可以通过替换特定的标记来自定义生成的代码。

DevNinja的博客 1859

Python生成C++类工具(PySideFrameless版)

Python生成C++类工具(PySideFrameless版)

iounce 805

py2cpp:程序可以将python源文件转换为C ++源文件-python source file

Py2Cpp 一个玩具项目,试图将Python代码的一小部分转换为CPP代码。 当前停止开发,您应该转到此链接。

加速Python代码的秘密武器,探索Cython的秘密

首先和大家明确一下这个Cython单词的读法,这个单词Cython以前我也不知道怎么读,老后面要用到这个包的时候,老是不清楚读法,才去搜了下,这个单词是读"赛森",就是前面的cy是读"赛",后面的读法和python后一个读音thon一样。

m0_59236602的博客 1285

即梦 AI 全功能零基础详细教程(纯技术版)

即梦 AI 是一款多模态 AI 生成工具,主打文本生成视频、图片生成视频、角色一致性生成、音画同步等核心功能,依托自研 AI 视觉模型,实现从文本 / 图片 / 音频素材输入,到高清视频、图像内容输出的全流程 AI 创作,支持短视频、短剧、创意素材等多场景创作,具备操作门槛低、生成效率高、画面可控性强的技术特点。@为工具内置引用指令,作用是锁定指定素材 / 角色,强制 AI 按照该素材的核心特征生成内容,无额外付费、解锁要求,免费使用。剧本拆分:将短剧拆分为单镜头(15 秒内 / 个)

2501_92061023的博客 5810

SPSS实战:5步搞定多指标联合诊断的ROC曲线分析(附Logistic回归教程)

本文详细介绍了如何使用SPSS软件进行多指标联合诊断的ROC曲线分析。通过5个实战步骤,从数据准备、二元Logistic回归建模生成综合预测概率,到绘制并比较单指标与联合模型的ROC曲线,帮助临床研究者有效整合多个诊断指标,提升模型判别能力(AUC),实现诊断效能的优化。

mqtt6iot的博客 1422

cpp2python:自动化C++到Python接口转换,提升多语言开发效率

在混合语言开发中,C++与Python的互操作是常见需求,涉及类型映射、内存管理和接口绑定等核心原理。通过自动化工具生成绑定代码,能显著降低手动编写C扩展或使用pybind11等库的技术门槛,提升开发效率。这类技术在多语言集成、性能优化和代码复用场景中具有重要价值,尤其适用于算法库封装、系统模块暴露等工程实践。cpp2python作为典型代表,基于头文件解析和代码生成,实现了从C++接口到Python模块的平滑转换,其核心在于自动化处理类型映射和生成pybind11代码,为开发者提供了高效的“桥梁建造”流水

weixin_30536861的博客 334

新手入门:从零开始学习PCB飞针测试全流程(附常见问题解答)

本文详细介绍了PCB飞针测试的全流程,从核心原理、设备解析到实操步骤和常见问题解答,帮助新手快速掌握这一电子制造领域的关键质检技术。内容涵盖测试资料准备、参数设置、设备操作技巧以及故障排查方法,特别适合小批量PCB生产的质量检测需求。

weixin_29295541的博客 389

C++根据.h文件批量生成需要的函数框架

类似VS中添加类 A的方法 int abc(); 会在对应的实现文件.cpp中自动生成, int A::abc() { } 初学python,尝试写了一个脚本,自动根据写好的.h文件完成这一工作,也支持模板类,不过没考虑太多模板可能会有bug。 也可能会有很多其他的bug,不过用了下,感觉还可以,有错误再改正:) 用法 比如有一个abc.h,对应的实现文件abc.cc 1....

weixin_34209851的博客 278

华为AC外置Portal认证方案配置步骤指南

华为AC外置Portal认证方案配置步骤指南

m0_46129105的博客 7663

CIC-IDS数据集特征介绍

###1、简介 通信安全机构(CSE)与加拿大网络安全研究所(CIC)合作项目,该项目对自1998年以来现有的11个数据集的评估表明,大多数数据集(比如经典的KDDCUP99,NSLKDD等)已经过时且不可靠。其中一些数据集缺乏流量多样性和容量,一些数据集没有涵盖各种已知的攻击,而另一些数据集将数据包有效载荷数据匿名化,这不能反映当前的趋势。有些还缺少特征集和元数据。 CIC-IDS-2017数据集包含良性和最新的常见攻击,类似真实世界数据(PCAPs)。 它的数据采集截至2017...

蓝亚之舟的博客 3万+

使用OpenCV自带gen2.py等工具生成C++的Python binding示例

前言 C++作为一种编译型语言,在其设计之初就偏重于性能、效率和灵活性,偏向应用于系统编程、嵌入式、资源受限的软件和系统。Python作为一种解释型语言,内置了如str, tuple, list, dict等常用数据结构,支持自动垃圾回收,拥有简洁的语法、丰富的内置库和第三方库,被越来越广泛地使用在各种场景中。但Python在高便捷性的同时无可避免的缺乏高性能。 在部分应用场景中,我们需要在Python的灵活性上架构应用,底层算法希望借助C++的高性能, 那么我们可以考虑将C++开发的模块做成Python

TracelessLe的专栏 1267

我看MFC的过去、现在和未来

首先说句题外话,虽然我现在的“主业”是Qt,但自己扪心自问,对MFC的熟悉程度要超过Qt。正是由于有了对MFC的熟悉,才能在使用Qt时,比较清醒的认清两者的优劣之处,在此暂且不提。 这个话题也可以说是由来已久,众说纷纭,今时我也谈谈自己的感悟。 一、对MFC的总体看法 首先看看云风在其《游戏之旅-我的编程感悟》一书中对MFC的看法: “我所见到的程序员中,很多把C+

qter_wd007的专栏 6115

python之自动生成解析xml的C++类

##xml2parser.py import os,sys,re from string import Template gHearFile = "cmd_parser" gSrcFile = "cmd_parser" gClassName = "CCParseXml" class CObject(object): #@Consist def __init__(self):

739

企业AI数据资产评估的自动化工具:AI应用架构师的使用指南

在AI驱动的企业数字化转型中,数据资产是支撑模型训练、业务决策的核心燃料。然而,80%的AI项目失败源于数据问题——低质量数据导致模型偏差、未评估的风险引发合规危机、价值不明确的数据浪费资源。手动数据资产评估效率低、易出错,无法满足规模化AI应用需求。本文将以AI应用架构师的视角,拆解企业数据资产评估的核心逻辑,用"餐厅选食材"的生活化比喻解释复杂概念,结合自动化工具的技术原理与实战案例,教你如何从0到1搭建数据资产评估体系。无论是数据质量检测、价值量化还是风险防控,你都能找到可落地的工具方案与实践步骤。

2502_91592937的博客 1629

ADC的有效位数(ENOB)、信噪比(SNR)和无杂散动态范围(SFDR)——详细分析

设计提示(从文本):选择ADC时,看数据手册的SNR、ENOB、SFDR vs 频率图。减小抖动:用低抖动时钟、优化PCB、电源滤波。对于大信号:关注SFDR(失真);小信号:关注SNR/ENOB(噪声)。如果ENOB不足,用过采样或多ADC并行提升(但增加复杂度)。为什么这段重要?它解释了为什么高速ADC(如用于5G、雷达)的规格那么贵:抖动和失真限制了高频性能。理解这些,能帮你避免设计陷阱。

VectorShift的博客 1402

用swig封装c++代码给python使用

我们在这两个文件里面定义了一个类Apple,给它添加了两个成员函数Setcolor和GetColor,是不是非常合理,一般的C++都是这么写的。但是由于我们的代码写的太好了,python用户也想用,我们需要将c++代码封装一下给python用户使用。让我们看看我们优秀的代码是怎么给python程序员带来震撼的。ctype,pybind11,但这里我们还是使用swig。文件总共3804行,我们只看比较核心的部分,函数的实现。我们来看一下swig给我们生成的中间文件都有什么内容。可以说,速度是非常的快。

闲人的专栏 894

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

python之自动生成C++的父子双向继承关系

## toClass.py import os,sys,re import shutil,string #[OK] class CObject(object): def __init__(self,name,href): self._name = name self._href = href self._children = []

855

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

c++和python有联系吗_打通Python和C++之后?你懂的!

Python作为世界上***的 胶水 语言(哼,世界上***的语言当然是PHP==),利用Python的简洁和C++的高效,基本可以解决99%的问题了吧~一般的,Python和C++的交互分为这两种情况:用C++扩展Python:当一个Python项目中出现了性能瓶颈时,将瓶颈部分抽离出来,用C++封装成一个Python可以调用的模块(so库);将Python内嵌入C++:当一个C++项目中有部...

weixin_39907131的博客 909

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

python转c++代码_Swig:C/C++代码转Python

下面用一个简单的小例子来说明,C++的源代码如下:(这里用到了C++11的特性)//kmodel.hpp#ifndef KMODEL_H#define KMODEL_H#include #include #include #include class KModel{public:KModel(){umap["123"]=1024;umap["name"]=2048;}std::unordered_...

weixin_39593061的博客 1609

python swig 调用cpp

原文链接: python swig 调用cpp 上一...

阿豪 54

【工具推荐】使用swig进行 C/C++和Python跨语言调用的全面教程

SWIG(Simplified Wrapper and Interface Generator)是一个用于连接C/C++代码与多种高级编程语言(如 Python、Java、Ruby、Perl、Tcl 等)的工具。通过 SWIG,你可以轻松地将 C/C++ 库封装并暴露给其他编程语言,从而实现跨语言调用。本文将详细介绍 SWIG 的安装、基本使用方法、高级用法,C/C++ 和 Python 跨语言调用,并通过具体示例帮助你快速上手。

科技改变人类,技术成就未来 2161

Python3调用C/C++动态库(使用SWIG)

参考文章:https://blog.youkuaiyun.com/whahu1989/article/details/95874756 前言 我之前写过一篇python3 ctypes模块使用方法与心得体会— int* ,char*等指针类型互转,如何转换对应的参数如,int*,char*等。 今天发现如果使用C++的STL相关参数,无解啊~, 如下面提供的导出函数: int parse(std::vector<char> & dump, std::vector<unsigned char&g

波风水门 1440

c++ python混合编程实战_C++ & Python 混合编程之Python 调用 C++(SWIG)实例讲解

SWIG 是一个帮助使用C或C++编写的软件能与其他各种高级语言进行嵌入链接的工具SWIG支持多种语言:Python,Java,PHP,Perl,Tcl和Ruby 相比较使用 python 自带扩展方法和Cython方法,SWIG不要求修改C/C++代码,根据C/C++的声明,对其进行包裹使得其他语言可以访问使用方法安装 SWIG# for linuxsudo apt-get install sw...

weixin_39712455的博客 273

SWIG 把 c++ 转化为 Python

outdir “./lib” 是表示 把生成的 pyswiglib.py 文件放到当前路径 ./lib 目录下。打开 vs 命令行 工具 : Develpoer Command Prompt for VS 2022。pyswiglib_wrap.cxx 是需要编译成库文件的c++封装。其中 pyswiglib.py 是需要python导入的模块。解压,然后把 swig.exe 目录添加到环境变量Path。编译生成_pyswiglib.dll 文件。可以安装 everything 工具查找文件。

TuringEvo专栏 1031

python代码生成应用程序_应用Python写的一个简单的Class代码生成器

平时苦于写一下C++类或数据结构时时,每个类都需要四五个与类相关的构造、析构函数。每次重复的写些类名和变量名,费时费力。若将这些函数省略,代码风格不好,又不安全。经常见一些代码生成工具,只需定义类名,变量,函数,就能生成比较完善的代码。格式统一,漂亮且安全。不过这些工具都与自己的框架或编译系统相关,通用性不是很好。最近想学习下python的应用,就尝试自己写一个简单的Class代码生成器。按照一般...

weixin_33603802的博客 407
上一篇: C++调用Lua
下一篇: Python生成C++类工具(PySideFrameless版)
iounce
博客等级 码龄18年 3粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值