On Wed, Jun 24, 2009 at 10:26 PM, Christopher Schramm <cschr...@shakaweb.org> wrote: > > > Thomas Berg wrote: > >> bp::object function = bp::object(myfunction); > > > > Great! And it was that simple... > > But wait... Giving that a second thought I don't think that's going to > exhaust bpy's full potential. At least I don't see a way to use it's > docstring handling or call policies. > > I'll test it tomorrow.
Just discovered a way of doing it properly with "def". By creating a "scope" object you can control where objects created by "def" are inserted, like this: #include <boost/python.hpp> #include <iostream> namespace bp = boost::python; void myfunction() { std::cout << "Hello world!\n"; } int main(int argc, char* argv[]) { Py_Initialize(); bp::object main = bp::import("__main__"); bp::object global = main.attr("__dict__"); { bp::scope sc(main); bp::def("function", myfunction, "function helpstring"); } bp::exec("function()", global, global); bp::exec("help(function)", global, global); return 0; } The scope object sets a global variable which bp::def uses when defining the function. In this case I passed the main module to the scope, so def inserts the definition into it. Getting closer now? Found this out by reading the source code of boost::python::detail::init_module, called by the BOOST_PYTHON_MODULE macro. Cheers, Thomas _______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@python.org http://mail.python.org/mailman/listinfo/cplusplus-sig