#include <sstream>
#include <string>
class NumberLike
{
public:
NumberLike(int n = 0) : mN(n) {}
NumberLike& operator+= (int i)
{
mN += i;
return *this;
}
int get_mN()
{
return mN;
}
std::string str() const
{
std::stringstream s; //字符串流对象
s << mN; //将mN存到 s
return s.str(); //s.str(),str() 是 std::stringstream::str() 用于返回std::stringstream 中的string 成员
}
std::string repr() const
{
std::stringstream s;
s << "NumberLike("<< mN << ")";
return s.str();
}
private:
int mN;
};
NumberLike operator+(NumberLike n, int i)
{
n += i;
return n;
};
NumberLike operator+(int i,NumberLike n)
{
n += i;
return n;
};
#include <boost/python.hpp>
using namespace boost::python;
BOOST_PYTHON_MODULE(boost_eg)
{
class_<NumberLike>("NumberLike")
.def(init< optional<int> >())
.def(self+=int())
.def(self + int())
.def(int()+self)
.def("__str__", &NumberLike::str) //python 成员名前加双下划线表示私有成员
.def("__repr__", &NumberLike::repr)
;
}
python 代码:
#!/usr/bin/env python
from boost_eg import NumberLike
n = NumberLike(7)
m = n + 2
print (m)
print("n=",n)
n += 1
print("n=",n)
m = 1+n
print("m =1+n",m)
n0 = NumberLike()
m0 = n0 + 1
print (m0)
print (repr(m0))
运行结果
9
n= 7
n= 8
m =1+n 9
1
NumberLike(1)