Bindings Python de librerías C++ con Boost.Python
Ejemplos mínimos para empezar con Boost.Python, probablemente la mejor libreŕia de generación de bindings Python para C++.
Introducción
Boost es un conjunto de librerías de calidad reconocida con amplio uso entre la comunidad de programadores C++, hasta el punto de que algunos de sus diseños e implementaciones pasarán a formar parte de la próxima versión del estándar C++, más conocido como C++0x. Por eso Boost.Python es una garantía de éxito.
Ingredientes
- python
- python-dev
- libboost-python1.35-dev
Hello (una función)
hello.cc
#include <string>
std::string hello() {
return "hello, world";
}
hello_wrapper.cc
#include <boost/python.hpp>
std::string hello();
using namespace boost::python;
BOOST_PYTHON_MODULE(Hello) {
def("hello", hello);
}
Makefile
CXXFLAGS=-I/usr/include/python2.4
LDFLAGS=-shared -lboost_python
Hello.so: hello.o hello_wrapper.o
$(CC) $(LDFLAGS) -o $@ $^
clean:
$(RM) Hello.so *.o *~
hello.py (ejemplo de uso)
#!/usr/bin/python
import Hello
print Hello.hello()
Bindings para una clase
control.h
class IntRW {
private:
int _state;
public:
void set(int value) {
_state = value;
}
int get() {
return _state;
}
};
control_wrapper.cc
#include <boost/python.hpp>
#include "control.h"
using namespace boost::python;
BOOST_PYTHON_MODULE(Control)
{
class_<IntRW>("IntRW")
.def("set", &IntRW::set)
.def("get", &IntRW::get)
;
}
control.py (ejemplo de uso)
#!/usr/bin/python
import Control
actuator = Control.IntRW()
actuator.set(100)
print actuator.get()
Referencias
La documentación de Boost.Python está un poco anticuada, pero es lo que hay:
[ show comments ]
blog comments powered by Disqus