[C++-sig] embedding an extended python module

Daniel Lawson daniel at wand.net.nz
Wed Jan 12 23:51:44 CET 2005


Ingo Lütkebohle wrote:

>Using a PyObject:
>
>  #include <boost/python/call.hpp>
>  ...
>  call<return-type>(pyobject, args)
>
>Or wrap your PyObject as an object
>(http://www.boost.org/libs/python/doc/tutorial/doc/html/python/embedding.html)
>and invoke it as a callable.
>  
>

I understand that. However, within my calling program (the one embedding 
python), I don't have a PyObject yet. I have a pointer to a C++ class.  
This class has been exported via boost.

I guess I'm missing something fundamental, like that boost provides a 
PyObject * pointer within a boost-wrapped class. Any pointers?

To clarify:

    Node *testnode = new Node("test")

    filtername = "filter.py";
    pName = PyString_FromString(filtername);
    pfilterhnd = PyImport_Import(pName);
    pDict = PyModule_GetDict(pfilterhnd);
    // this is the function we wish to call
    // it accepts a "Node" parameter, and returns an int
    pfilter = PyDict_GetItemString(pDict, "filter");


So, you're suggesting I can do something like:

       boost::python::call<int>(pFilter, testnode)

And boost will handle the conversion? 


Thanks,

Daniel



More information about the Cplusplus-sig mailing list