boost python 函数中传递对象

Boost之Python 需要注意的是,尽管 Boost::Python 提供了许多便利的功能,但它的实现依赖于 Python/C API,因此在使用时要结合 Python/C API 的相关知识。此外,Boost::Python 的某些功能可能还不完善,需要开发者对 Python/C API 有一定的了解,以便在遇到问题时能够进行调试和解决。总的来说,Boost::Python 为 C++ 和 Python 之间的互操作提供了一个强大而灵活的工具,使得开发者能够充分利用两种语言的优势,实现更加高效和强大的应用程序。 阅读详情

class 类

class XEventWarp:public XEvent
{
public:
	PyObject *self;
	XEventWarp(PyObject* self_):self(self_){ Py_INCREF(self); }
	XEventWarp( PyObject* self_, const XEvent& copy ) : XEvent(copy), self(self_) { Py_INCREF(self); }
	 ~XEventWarp() {Py_DECREF(self); }
	 
};

BOOST_PYTHON_MODULE(_core)
{
	class_<XEvent, auto_ptr<XEventWarp> >("XEvent")
		.def("Skip",&XEvent::Skip)
		.def("Stop",&XEvent::Stop)
		.def("__cmp__",&XEvent::Cmp)
		.add_property("wKeyState",&XEvent::GetWKeyState)
		.add_property("cpt",&XEvent::GetClientPos)
		.add_property("spt",&XEvent::GetScreenPos)
		.add_property("hWnd",&XEvent::GetHandler)
		.add_property("tick",&XEvent::GetTime)
		.add_property("lParam",&XEvent::GetLParam)
		.add_property("wParam",&XEvent::GetWParam)
	;
	implicitly_convertible<auto_ptr<XEventWarp>, auto_ptr<XEvent>>();
}

XEvent导出函数模板,其中OnEvent函数定义为VOID OnEvent(XEvent* evt)

由于是虚函数 所以需要写一个包装类

class HWndObjectWapper:public HWndObject,public wrapper<HWndObject>
{

public:
	HWndObjectWapper(){}
	HWndObjectWapper(std::string className,std::string sbClassName)
		:HWndObject(className,sbClassName){}

	VOID OnEvent(XEvent* evt)
	{
		if(override function=this->get_override("OnEvent"))
		{
			//object obj(evt); 
			//function(obj); 
			reference_existing_object::apply<XEvent*>::type converter;
			PyObject* obj = converter(evt);
			object real_obj = object( handle<>( obj ) );
			function(real_obj);
		}
		else
		{
			this->HWndObject::OnEvent(evt);
		}
	};

	VOID OnFinalMessage()
	{
		if(override function=this->get_override("OnFinalMessage"))
		{
			function();
		}
		else
		{
			this->HWndObject::OnFinalMessage();
		}
	}

	VOID DefaultOnFinalMessage(){ HWndObject::OnFinalMessage();};
	VOID DefaultOnEvent(XEvent* evt){ HWndObject::OnEvent(evt);};


};
其中有两种调用方式,如果需要 传递到py里面的object和C++ object绑定

则 

reference_existing_object::apply<XEvent*>::type converter;
PyObject* obj = converter(evt);
object real_obj = object( handle<>( obj ) );
function(real_obj);

如果 不需要 关联 则

object obj(evt);
function(obj);

直接调用即可

Boost.Python: 初步介绍 Boost.Python介绍 Boost.Python简单概括:是Boost库的一部分;用来在C++代码中调用python代码以及在Python代码中调用C++代码,并且避免用户直接操作指针。 BoostPython库让C++和Python几乎无缝结合,是Boost库的一个功能。 用BoostPython库,能快速、容易地将C++输出到Python,使得Python接口和C++接口非常像。它 阅读详情

相关推荐

使用原始指针访问数据的boost::python模块示例

在C++中使用Python的扩展模块boost::python时,经常需要将C++的对象和数据类型暴露给Python。值得一提的是,这些对象和数据类型很可能是通过指针传递的,因此如何在Python环境中访问指针指向的数据成为一个值得探讨的问题。总结一下,通过以上示例,我们演示了如何使用boost::python模块实现使用原始指针访问数据的操作,这对于在Python环境中访问C++中通过指针传递的数据是非常有用的。本文将以一个简单的实例来演示如何在Python中访问C++中通过指针传递的数据。

TechPr的博客 146

Boost(8):Boost.Python 实现 Python 对象以及各种类型的内置操作和方法

说明 Python 有多种非常好用的数据类型,如 Numbers,String,List,Tuple,Dictionary 和 Set。在前面的示例中我们经常用到的 Numbers 和 String(它们的内容) 可以直接在 C++ 代码中使用,因为这两者也是 C++ 的数据类型(虽然实现上不同,但不妨碍两者通用)。但是其他类型的数据结构在 C++ 中并没有,那么当 Python 需要使用这些类型且与 C++ 代码有交互时,该如何处理呢? 在 Boost.Python 和 C++ 的观点中,这些 Pytho

翔底的博客 3572

Charmve Coding | Codility - Counting Elevator Movements

Perface Since last week, Apr 17. 2020, I had been starting to hold a Data Structs & Algorithms series training course. So I am going to make coding tests as a push study as much as possible, so ...

迈微AI研习社 · 号主 871

Boost(6):Boost.Python 如何转换 C++ 的参数和返回值类型

详述使用Boost.Python转换C++的参数和返回值到Python

翔底的博客 1874

SAP 屏幕增强:客户商主数据屏幕增强(KNA1、KNB1、KNVV)

本文介绍了SAP系统中针对客户主数据(KNA1、KNB1、KNVV)进行屏幕增强的具体实现方法。主要内容包括:1)在SPRO配置中创建新条目;2)通过SE80创建函数组和程序(LZKNA1TOP等);3)设置子屏幕9001并添加自定义结构字段;4)利用BADI(CUSTOMER_ADD_DATA等)实现数据交互逻辑。文章分别详细说明了针对客户主数据的一般数据(KNA1)、公司代码数据(KNB1)和销售数据(KNVV)三类不同数据的增强配置步骤,包括函数模块创建、屏幕设置和BADI方法调用等关键技术点。

SAP ABAP开发技能记录分享 1614

机器学习系列(3)_逻辑回归应用之Kaggle泰坦尼克之灾

f作者: 寒小阳 &&龙心尘 时间:2015年10月。 出处: 声明:版权所有,转载请注明出处,谢谢。手把手机器学习之逻辑回归应用——Kaggle泰坦尼克之灾1.引言先说一句,年末双十一什么的一来,真是非(mang)常(cheng)欢(gou)乐(le)!然后push自己抽出时间来写这篇blog的原因也非常简单: 写完前两篇逻辑回归的介绍和各个角度理解之后,小伙伴们纷纷表示『好像很高级的样纸,

寒小阳 43万+

Boost.Python教程:对象接口

Python是动态类型的,与静态类型的C ++不同。Python变量可以包含整数,浮点数,列表,字典,元组,str,long等等。从Boost.Python和C ++的角度来看,这些Pythonic变量只是类object实例。我们将在本章中看到如何处理Python对象。 如前所述,Boost.Python的目标之一是在保持Python感觉的同时提供C ++和Python之间的双向映射。B...

xinqingwuji的博客 4597

数学不好是原罪——高等数学笔记(汇总版)

这是本人之前考研的高数手写笔记,工科学硕数一考了146(满分150),笔记有一定参考价值,欢迎大家收藏借鉴。

xuuyann 5万+

Boost(5):从python object提取c++语言的类型以及extract类详解

前言 python和c++之间数据类型的差别是进行转换时经常碰到的问题,有些简单的数据类型可以通用,但还有很多中类型则无法直接使用。在碰到这类问题时,boost.python提供的extract类是一个很方便的解决方案。这篇内容用于记录我在使用中对extract的理解。 1. 说明 1.1 Extract介绍 Extract是Boost.Python中用来从Python对象中提取c++对象的类,通过这个类我们可以将一些Python的对象转换成C++语言的对象。如将 boost::python::str类型

翔底的博客 1898

VS2019 C# MySQL 学生信息增删改查(一、增删)

VS2019 C# MySQL 学生信息增删改查 由于刚刚学习VS2019,入手的第一个例子是编写一个简单的增删改查。这里,我以学生信息为例,进行详细的过程描述以及代码实现。 一、 新建一个Windows窗体应用程序 1、创建新项目界面,如下图所示。 2、更改项目名称,当然不修改也可以。我这里的是“StudentInfoSystem”;项目存放位置路径根据自己需要进行更改;“将解决方案和项目放在同一目录中”前面的勾选框,选不选都可以;点击“创建”,如下图所示。 二、前期准备工作 1、将Form1属性中

青哥 1万+

如何实现Docker镜像导入导出 ?

摘要: Docker镜像迁移与备份可通过两种方式实现:1)镜像操作(save/load)完整保存分层结构和元数据,适用于完整备份;2)容器操作(export/import)仅保存文件系统快照,适合创建轻量模板。关键区别在于前者保留历史记录和分层,后者生成单层镜像。save/load命令示例:docker save -o nginx.tar nginx:latest,export/import示例:docker export -o container.tar abc123 && docker

weixin_39291964的博客 875

boost python 参数结构体指针_boost python 函数中传递对象

class 类class XEventWarp:public XEvent{public:PyObject *self;XEventWarp(PyObject* self_):self(self_){ Py_INCREF(self); }XEventWarp( PyObject* self_, const XEvent& copy ) : XEvent(copy), self(self_)...

weixin_33765908的博客 436

Camunda 7.x 系列【62】启动流程实例源码解析

为了更好的了解Camunda,接下来我们简单分析下启动流程实例相关源码

记录知识、锤炼自我 1171

python传递类的实例_将Python类实例传递给C ++函数

I have an in-house library written in C++ that I'm currently working on extending into Python. I started this task with Boost.Python in mind, but I'm open to alternatives.Currently I have a C++ functi...

weixin_39748928的博客 216

基于STM32设计的智能门锁(微信小程序+手机APP等多种方式开锁)(188)

当前智能门锁项目是基于STM32微控制器、ESP8266-WIFI模块、OLED显示屏、指纹模块、蓝牙模块、门禁刷卡模块、烟雾检测模块、火光检测模块、温湿度检测模块等硬件设备开发的一种智能门锁系统

1万+

YOLOv11改进策略【Neck】| PRCV 2023,SBA(Selective Boundary Aggregation):特征融合模块,描绘物体轮廓重新校准物体位置,解决边界模糊问题

SBA 模块在医疗图像分割中具有重要作用,其设计出发点是解决图像中物体边界模糊以及融合特征时的冗余和不一致问题。

Limiiiing的博客 1942

python定义数组是带指针_如何在Python中为包装的C函数传递指向数组的指针

我是C / Python混合语言编程的新手,对Python / C API不太了解.我刚开始使用Boost.Python为Python包装一个C库.我被困在包装一个函数,该函数将指向数组的指针作为参数.以下(第二个ctor)是它在C中的原型.class AAF{AAF(AAF_TYPE t);AAF(double v0, const double * t1, const unsigned * t2...

weixin_39605894的博客 520

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

c++调用python接口作用是_利用Boost::Python实现C++调用python接口

Boost.Python能将C++的结构体暴露给Python使用。但是在运用Boost.Python时,却遇到一个难题,1、在C++定义一个新的结构体structA2、将此结构体暴露给Python解释器3、如今在工程中生成结构体A的对象,Aa。4、希望将a传入Python解释器进行运算,运算的函数写在某py文件中。一直没有办法解决,希望大虾帮助解答。这个问题就是在c++中调用py实现的接口函数...

weixin_39850143的博客 91

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

c++调用python接口作用是_利用Boost::Python实现C++调用python接口 原

Boost.Python能将C++的结构体暴露给Python使用。但是在运用Boost.Python时,却遇到一个难题,1、在C++定义一个新的结构体structA2、将此结构体暴露给Python解释器3、如今在工程中生成结构体A的对象,Aa。4、希望将a传入Python解释器进行运算,运算的函数写在某py文件中。一直没有办法解决,希望大虾帮助解答。这个问题就是在c++中调用py实现的接口函数...

weixin_39597318的博客 108

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Boost.Python教程:类的继承

在前面的示例中,我们处理的是非多态的类。通常情况并非如此。大多数时候,我们将包含通过继承相关的多态类和类层次结构。我们经常需要为从抽象基类派生的类编写Boost.Python包装器。 考虑这个简单的继承结构: struct Base { virtual ~Base(); }; struct Derived : Base {}; 及在Base和Derived对象实例上运行的一组C ++函数: ...

xinqingwuji的博客 823

python编程语言继承_月光软件站 - 编程文档 - 其他语言 - C++ Boost 之Python(继承)

继承在Python中继承用Boost.Python扩展的类在Python中支持单继承和多继承.你可以在派生类中任意地混合内建Python类和扩展类.只要Boost.Python 扩展类是在Python中新的类的基类中, 那么结果就是一个扩展的类:>>> class MyPythonClass:... def f(): return 'MyPythonClass.f()'...>>> imp...

weixin_39895862的博客 73

python列表中单个元素的访问方式_从boost::python::object列表中获取单个元素,用于python routin...

我有一个c++boost python对象(PyObject*上的boost包装器)用于python列表PyObject * pyList = func(...);boost::python::object listObj(handle<>(boost::python::borrowed(pyList)));我可以通过对其执行以下操作来验证这确实是一个列表^{pr2}$从I-1元素中减...

weixin_39962199的博客 439

C++调用Python(4)

   其实,C++调用Python有两种方式,我前面介绍了第一种方式:通过找到Python模块,类,方法,构造参数来调用。第二中方式,就是通过构造出一个Python的脚本,用python引擎来执行。第一种方式可能更为优雅,符合大多数的反射调用的特点。(我在以前的一个项目中,实现了c#的反射机制,c#调用Com+,c#调用javascript脚本等)。  还有一个问题,两种语言互相调用的时候,需要做

架构和代码 1万+

python调用opencv_从Python调用C opencv函数(将cv :: Mat发送到使用opencv的C dll)

您可以看一下OpenCV Python包装器.在modules / python / src2 / cv2.cpp中的OpenCV文件夹中(取决于版本,我使用OpenCV 2.4),OpenCV Python包装器使用了一些称为pyopencv_to的函数.其中之一用于将PyObject转换为cv :: Mat.您的“ FromPython”函数需要获取PyObject作为输入.我个人使用boos...

weixin_39743414的博客 690

C++ Boost 之Python(继承)

继承 在Python中继承用Boost.Python扩展的类在Python中支持单继承和多继承.你可以在派生类中任意地混合内建Python类和扩展类.只要Boost.Python 扩展类是在Python中新的类的基类中, 那么结果就是一个扩展的类: >>> class MyPythonClass:... def f(): return MyPythonClass.

Lythm的专栏 2671

c python boost.python_boost.python笔记

boost.python笔记标签:boost.python简介Boost.python是什么?它是boost库的一部分,随boost一起安装,用来实现C++和Python代码的交互。使用Boost.python有什么特点?不需要修改原有的C++代码,支持比较丰富的C++特性。不会生成额外的python代码(像SWIG那样),但是需要写一部分C++的封装代码。我只用到了其功能的一部分,把C/C++实...

weixin_39766071的博客 2148
上一篇: POI Word DOC格式转Html
下一篇: CA服务器开开发(一)---颁发证书,生成pfx证书安装文件
xugangjava
博客等级 码龄16年 83粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值