[C++-sig] Re: Exposing C++ objects to Python at runtime
Jonathan Warrington
jon at shirwin.com
Tue Nov 25 00:01:20 CET 2003
Ah, ok I think I see where the communication problem was now.
What I was wanting to do, was have it so that my other components would
only know of that scripting engine interface, and use that to register
themselves at runtime when they are created, and therefore if my XYZ
class changes all I have to do is recompile that. Not have to generate
new Boost.Python registration code, and recompile that wrapper.
So,
App Starts
App creates an instance of Scripting Engine
App creates an instance of class XYZ
App passes scripting engine to XYZ->Init()
XYZ registers what it wants to be scriptable as scriptable
So, if I want to use javascript instead, I tell App to create a
javascript engine instead, and then nothing else would need to change
except the scripts being called. No need to create new wrapper code.
Does that make more sense as to what I'm wanting to be able to do? I'm
assuming that it'd require certain restrictions on what can be
registered, like the way I was doing the functions, where you can only
register a specific function prototype, as long as it's not too
restrictive, that's fine.
Jon
Ralf W. Grosse-Kunstleve wrote:
> --- Jonathan Warrington <jon at shirwin.com> wrote:
>
>>Yes I've looked at the tutorial, and all the examples use the macro
>>BOOST_PYTHON_MODULE() which means the classes that will be scriptable
>>will have to import the Boost.Python headers, and be compiled against
>>Python.
>
>
> Why would that be? You only have to compile the wrapper code using the
> Boost.Python headers (and with that the Python headers).
>
> your_wrapper.cpp:
>
> #include <boost/python.hpp> // first to meet a Python requirement
> #include <your_library_headers_that_know_nothing_about_python.hpp>
>
> BOOST_PYTHON_MODULE(foo)
> {
> boost::python::class_<your_class_bar>("your_class_bar");
> }
>
> Compile and link against your_library.a or your_library.so. Look at the bjam
> toolsets to see how exactly it is done on each of the of platforms that
> Boost.Python was tested under (many).
>
> Ralf
>
More information about the Cplusplus-sig
mailing list