这里使用到的函数
#导入普通成员变量(公有成员变量)
boost::python::def_readwrite("member_name",& class::member)
#导入只读成员变量(使用const 修饰的公有成员变量)
boost::python::def_readonly("member_name",& class::member)
#将多个个成员函数封装到一个属性当中
boost::python::add_property("property_name",& class::fun1,&class::fun2)
#include <string>
#include <sstream>
class SomeClass
{
public:
SomeClass(std::string n,std::string class_n) : name(n),class_name(class_n),mNumber(0.0) {}
std::string name; //将要到处的成员,注意被到处的成员必须是公有成员
const std::string class_name;
double getNumber() const { return mNumber; }
void setNumber(double n)
{
if (n>3.141592654)
n = -1;
mNumber = n;
}
private:
double mNumber;
};
#include <boost/python.hpp>
using namespace boost::python;
BOOST_PYTHON_MODULE(boost_eg)
{
class_<SomeClass>("SomeClass", init<std::string,std::string>())
//导入类的公有的普通成员变量
.def_readwrite("name", & SomeClass::name)
//导入类的公有的只读成员变量
.def_readonly("class_name",& SomeClass::class_name)
//将2个成员函数封装到了一个属性number 中,如何使用这个属性看python脚本
.add_property("number", &SomeClass::getNumber, &SomeClass::setNumber)
;
}
python 代码
#!/usr/bin/env python
import boost_eg
m1 = boost_eg.SomeClass("Pavel"," m1")
print("class_name=",m1.class_name) #打印只读变量的值,只读变量只能读不能写
print ("name =",m1.name)
m1.name = "Gunther" #设置普通成员变量的值
print ("name =",m1.name)
m1.number = 7.3 #调用实际上是setNumber函数
print ("number =",m1.number) #m1.number 调用的实际上是getNumber函数
运行结果
class_name= m1
name = Pavel
name = Gunther
number = -1.0