请教编程高手一个python与C++相互调用的问题

你好!我最近在研究如何利用python向C++中传递一个结构体的列表,结构体中包含两三种数据,使用列表传递这样的多个结构体,现在已经实现用pyd文件将两种语言相互调用了,... 你好!我最近在研究如何利用python向C++中传递一个结构体的列表,结构体中包含两三种数据,使用列表传递这样的多个结构体,现在已经实现用pyd文件将两种语言相互调用了,但是不知道怎么传递这样复杂的数据。
此外,C++又如何讲这样的结构体列个表传回给python,python用什么函数或者库可以进行解析?
看过ctypes库或者boosttype,不是十分清楚如何下手,希望了解的人提供一些方法,或者参考,非常感谢!
展开
 我来答
?诗?⃢意?仙?⃢女?
2013-04-19 · 超过17用户采纳过TA的回答
知道答主
回答量:39
采纳率:66%
帮助的人:12.8万
展开全部
//使用boost_python
//从C++返回列表给python,文档已经说的很清楚了,我贴上来你注意看
// Copyright Joel de Guzman 2005-2006. Distributed under the Boost
// Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
#include <boost/python.hpp>
#include <boost/python/suite/indexing/vector_indexing_suite.hpp>
#include <vector>

using namespace boost::python;

class Abstract
{
public:
virtual ~Abstract() {}; // silence compiler warningsa
virtual std::string f() =0;
};

class Concrete1 : public Abstract
{
public:
virtual std::string f() { return "harru"; }
};

typedef std::vector<Abstract*> ListOfObjects;

class DoesSomething
{
public:
DoesSomething() {}

ListOfObjects returnList()
{
ListOfObjects lst;
lst.push_back(new Concrete1()); return lst;
}
};

BOOST_PYTHON_MODULE(pointer_vector_ext)
{
class_<Abstract, boost::noncopyable>("Abstract", no_init)
.def("f", &Abstract::f)
;

class_<ListOfObjects>("ListOfObjects")
.def( vector_indexing_suite<ListOfObjects>() )
;

class_<DoesSomething>("DoesSomething")
.def("returnList", &DoesSomething::returnList)
;
}
//从python传结构体给C++,可以用class的思考方式实现啊,在C++里面struct和class基本等同,用boost::python很容易实现的,
百度网友6dc5d8b
2013-04-18 · TA获得超过721个赞
知道小有建树答主
回答量:390
采纳率:100%
帮助的人:270万
展开全部
python 我不懂,了解过,似乎是解释型语言,不过有py2exe这东西,
如果你知道python的结构体在内存中的组织形式,那你把数据的内存组织形式告诉我,我可以给你封装一个库,这个库提供C++接口接收你的结构体参数
如果你自己懂某一操作平台下的C++底层实现(懂汇编就ok),这问题分分钟搞定
如果你懂python的底层实现,你根本不会遇到这种问题!!!!
更多追问追答
追问
你好
如果你自己懂某一操作平台下的C++底层实现(懂汇编就ok),这问题分分钟搞定
如果你懂python的底层实现,你根本不会遇到这种问题!!!!
这两句话怎么养理解,可否详细解释下第一句?
追答
你知道C语言的各种数据类型在内存中是什么存储的吗?
你知道结构体在内存中是怎么存储的吗?(请注意,这里涉及到内存对齐的问题)

你知道 C语言的数据 强制类型转换在内存中是怎么实现的吗?

知道这些其实已经能搞定你最初想解决的问题了

如果 你要达到我我的那句话的境界
你还需要 了解一点汇编语言
这样 你就可以说自己熟悉某一操作平台(现在主流的windows 跟linux)下的C/C++(底层上面 C跟C++实现毫无任何差别)底层实现了
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式