Yes. You can create a Python C ++ extension where your C ++ objects will be visible inside Python as if they were built-in types.
There are two main ways to do this.
1.Create an extension yourself, following the documentation provided in the CPython API Documentation .
2. , boost:: python SWIG.
boost:: python - ( , , , , ).
boost:: python :
#include <boost/python.hpp>
class A {
public:
A(int i)
: m_i{i} { }
int get_i() const {
return m_i;
}
private:
int m_i;
};
BOOST_PYTHON_MODULE(foo) {
using namespace boost::python;
class_<A>("A", init<int>())
.def("get_i", &A::get_i, "This is the docstring for A::get_i")
;
}
Compile:
g++ -o foo.so foo.cpp -std=c++11 -fPIC -shared \
-Wall -Wextra `python2.7-config --includes --libs` \
-lboost_python
Python:
>>> import foo
>>> a = foo.A(2)
>>> a.get_i()
2
>>> print a.get_i.__doc__
get_i( (A)arg1) -> int :
This is the docstring for A::get_i
C++ signature :
int get_i(A {lvalue})