Boost.Python 学习笔记 No.2——python操作c++对象
来源:互联网 发布:淘宝网下载2016新版 编辑:程序博客网 时间:2024/06/05 19:28
准备条件不赘述,看No.1
目标:将C++类通过dll导入到Python中使用
总结:
基本上还算顺利,不过构造函数那里是主要需要注意的地方,需要额外的写进一些东西。
如果没写的话是这种结果:
当时是用这段代码测试的:
#test.py
import ObjectTesthuman1 = ObjectTest.Human()human2 = ObjectTest.Human("KK", 100)print human1.age()print human1.name()human1.eat()human1.play()human1.setName("XX")print human1.name()human1.setAge(15)print human1.age()print '---------------'print human2.age()print human2.name()C++那边是提供了默认构造参数。
即如果设定参数进行构造的话,会和python那边的构造参数列表不对应。
于是修改main.cpp,加上了init<string, int>(),结果用相同的test.py是报这种错误:
总之是默认构造参数没有生效的问题,所以可能在给python传递对象的不能使用默认构造参数。
测试代码:
C++
//main.cpp#include <boost/python.hpp>#include <string>#include "Human.h"using namespace boost::python;BOOST_PYTHON_MODULE(ObjectTest){class_<Human>("Human", init<std::string, int>()).def("eat",&Human::Eat).def("play",&Human::Play).def("setName",&Human::SetName).def("setAge",&Human::SetAge).def("name",&Human::name).def("age",&Human::age);}
//Human.h#pragma once#include <iostream>#include <string>using namespace std;class Human{public:Human(string name = "小M", int age = 22);~Human();void Eat();void Play();void SetName(string name);void SetAge(int age);//返回const引用的话编译会出错。const string name() const;const int age() const;private:string_name;int_age;};
//Human.cpp#include "Human.h"Human::Human(string name, int age):_name(name), _age(age){cout<<_name<<"诞生啦"<<endl;}Human::~Human(){cout<<_name<<"挂掉啦"<<endl;}void Human::Eat(){cout<<_name<<"在吃饭"<<endl;}void Human::Play(){cout<<_name<<"在玩..."<<endl;}void Human::SetName(string name){_name = name;}void Human::SetAge(int age){_age = age;}const string Human::name() const{return _name;}const int Human::age() const{return _age;}
Python
//test.pyimport ObjectTesthuman1 = ObjectTest.Human("KK", 100)print human1.age()print human1.name()human1.eat()human1.play()human1.setName("XX")print human1.name()human1.setAge(15)print human1.age()
效果:
- Boost.Python 学习笔记 No.2——python操作c++对象
- Boost.Python 学习笔记 No.1——python调用c函数
- Boost.Python学习笔记
- Boost.Python 学习笔记
- Boost python 学习笔记
- Boost python 学习笔记
- Boost.Python学习笔记
- Boost::Python学习笔记
- Boost.python学习笔记(2)
- Boost.python学习笔记(1)
- Python学习笔记——文件对象和操作(2)
- Python学习笔记——对象
- Python学习笔记 —— 对象
- Python学习笔记——切片操作
- python学习笔记——文件操作
- Python学习笔记 —— 文件操作
- Python学习笔记——文件操作
- python学习笔记——字符串操作
- 利用pypcap、dpkt和pylibnet轻松实现网络捉包、网络包分析和网络包修改
- Erlang OTP 热更新
- spring_mvc中的问题
- win7 web开发遇到的问题-由于权限不足而无法读取配置文件,无法访问请求的页面
- 函数重载/重写/重定义(覆盖)
- Boost.Python 学习笔记 No.2——python操作c++对象
- DaVinci的Buffer_Handle和BufTab Cmem函数调用
- 经典SQL语句大全
- Hibernate的事务处理机制
- DM6467之视频采集(Linux)下MMAP
- 黑马程序员--交通灯管理系统
- Android中资源文件assets和res下面raw文件的使用不同点
- LINQ简记(1):基本语法
- DM6467 memory map HOW-TO