
Ejemplos mínimos para empezar con Boost.Python, probablemente la mejor libreŕia de generación de bindings Python para C++.
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.
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()
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()
La documentación de Boost.Python está un poco anticuada, pero es lo que hay:
Comentarios
Ejemplos con STL
Bindings de Python con Boost para map y vector en: https://arco.esi.uclm.es/svn/public/samples/boost.python/stl/
No soy portavoz de ningún colectivo, grupo o facción. Mi opinión es personal e intransferible.
muchas...
... gracias.
--
"Computer Science is no more about computers than astronomy is about telescopes."
– Edsger W. Dijkstra
brue
Sorry
Lo publiqué sin darme cuenta. Pensaba añadir algo de wrapping de contenedores STL antes de publicarlo, pero la verdad es que ahora no tengo tiempo. Si la quieres continuar tú, adelante.
No soy portavoz de ningún colectivo, grupo o facción. Mi opinión es personal e intransferible.