Boost
python允许您以非常紧密的集成方式将c
类公开给python-您甚至可以包装它们,以便可以从c 类派生python类,并将虚拟方法解析为python覆盖。
该升压蟒蛇教程是一个良好的开端。
编辑:
You can create a c++ object and pass a reference to it to an internal python
interpreter like this:
#include <boost/shared_ptr.hpp>#include <boost/make_shared.hpp>#include <boost/python.hpp>#include <string>#include <iostream>namespace bp = boost::python;struct Foo{ Foo(){} Foo(std::string const& s) : m_string(s){} void doSomething() { std::cout << "Foo:" << m_string << std::endl; } std::string m_string;};typedef boost::shared_ptr<Foo> foo_ptr;BOOST_PYTHON_MODULE(hello){ bp::class_<Foo, foo_ptr>("Foo") .def("doSomething", &Foo::doSomething) ;};int main(int argc, char **argv){ Py_Initialize(); try { PyRun_SimpleString( "a_foo = Nonen" "n" "def setup(a_foo_from_cxx):n" " print 'setup called with', a_foo_from_cxxn" " global a_foon" " a_foo = a_foo_from_cxxn" "n" "def run():n" " a_foo.doSomething()n" "n" "print 'main module loaded'n" ); foo_ptr a_cxx_foo = boost::make_shared<Foo>("c++"); inithello(); bp::object main = bp::object(bp::handle<>(bp::borrowed( Pyimport_AddModule("__main__") ))); // pass the reference to a_cxx_foo into python: bp::object setup_func = main.attr("setup"); setup_func(a_cxx_foo); // now run the python 'main' function bp::object run_func = main.attr("run"); run_func(); } catch (bp::error_already_set) { PyErr_Print(); } Py_Finalize(); return 0;}


