学习中如果碰到问题,参考官网例子:
D: \ python boost_1_61_0 \ libs \ \测试
引用>参考:提振。Python中英文文档。
<>强利用提振。Python实现Python C/c++混合编程强>
<>强关于python与c++混合编程,事实上有两个部分强>
<李>扩展所谓python程序中调用c/c++代码,其实是先处理c++代码,预先生成的动态链接库,如例子。所以,而在python代码中导入例子;即可使用c/c++的函数。李> <李>嵌入c++代码中调用python代码。李>
两者都可以用python c转换api,解决,具体可以去python官方文档查阅,但是都比较繁琐。
对于1,扩展,常用的方案是boost.python以及痛饮。
痛饮是一种胶水语言,粘合c++、PYTHON、我前面的图形显示二叉树的文章中提到的就是利用pyqt作界面,调用c++代码使用痛饮生成的,所以动态库。
而boost.python则直接转换,可以利用py + +自动生成需要的包装。关于这方面的内容的入门除了boost.python官网,中文的入门资料推荐
下面话不多说了,来一起看看详细的介绍吧
# includepython:# include<提高/python.hpp> 使用名称空间性病; boost:: python使用名称空间; const char *问候() { 返回“hello, world”; } BOOST_PYTHON_MODULE (hello_ext) { def(“打招呼”,问候); }
进口hello_ext 打印hello_ext.greet ()
导出默认构造的函数的类
c++
# includepython:# include<提高/python.hpp> 使用名称空间性病; boost:: python使用名称空间; 结构体的世界 { 空集(string味精){→味精=味精;} 字符串问候(){返回味精;} 字符串味精; }; BOOST_PYTHON_MODULE(你好)//导出的模块名字 { class_ (“世界”) . def(“打招呼”,和世界::问候) . def(“套”,和世界::集); }
进口你好 地球=hello.World() #调用默认构造函数,产生类对象 planet.set(“你好”)#调用对象的方法 打印planet.greet() #调用对象的方法
# include# include<提高/python.hpp> 使用名称空间性病; boost:: python使用名称空间; 结构体的世界 { 世界(string味精:味精(msg){}//增加构造函数 世界(双,双b): b (a)、(b){}//另外一个构造函数 空集(string味精){→味精=味精;} 字符串问候(){返回味精;} 双sum_s(){返回a + b;} 字符串味精; 双的; 双b; }; BOOST_PYTHON_MODULE(你好)//导出的模块名字 { class_ (“世界”,init ()) . def (init<双double>())//暴露另一个结构 . def(“打招呼”,和世界::问候) . def(“套”,和世界::集) . def (“sum_s”和世界::sum_s); } python测试调用:
进口你好 地球=hello.World (5、6) planet2=你好。世界(“你好世界”) 打印planet.sum_s () 打印planet2.greet ()如果不想导出任何构造函数,则使用no_init:
class_(“抽象”,no_init)
# include# include<提高/python.hpp> 使用名称空间性病; boost:: python使用名称空间; 结构体变量 { Var(字符串名称):名称(名称),值(){} 字符串常量名称; 浮动值; }; BOOST_PYTHON_MODULE (hello_var) { class_ (“Var”, init ()) .def_readonly(“名字”,和Var:名称)//只读 .def_readwrite(“价值”,和Var:值);//读写 } python调用:
进口hello_var var=hello_var.Var (“hello_var”) var.value=https://www.yisu.com/zixun/3.14 # var.name='你好' #错误 打印var.name如何利用提振。Python实现Python C/c++混合编程详解