[C++-sig] Re: boost::python> exposing instances from c++

David Abrahams dave at boost-consulting.com
Mon Jul 28 16:20:59 CEST 2003


The following message is a courtesy copy of an article
that has been posted to comp.lang.python as well.

Dear Mr. Handheld Vacuum,

You will probably get better answers to your Boost.Python questions
if you post them to the C++-sig.  See
http://www.boost.org/more/mailing_lists.htm#Cplussig.

thedustbustr at aol.com (TheDustbustr) writes:

> I'm writing a game in C++ which calls out to python for scripting.  I'd like to
> expose the instance of my Game class (a singleton) to python (so that the
> instances of Clock, Camera, etc are available to the scripts).
>
> I ran into trouble trying to expose a specific instance (or even a function
> returning the instance).  Here is a simplification of my problem in code (c++):
>
> <code>
> class A{
> public:
>     int i;
> };
> class B{
> public:
>     A a;
> };
> B b;
> B getb() {return b;} //return the instance
>
> int main() {
>     getb().a.i = 42;
>     return 0;}
> #include <boost/python/module.hpp>
> #include <boost/python/class.hpp>
> #include <boost/python/def.hpp>
> using namespace boost::python;
> BOOST_PYTHON_MODULE(hello)
> {
>     class_<A>("A",init<>())
>         .def("i", &A::i);
>     class_<B>("B",init<>())
>         .def("a", &B::a);
>     def("getb", getb);
> }
> </code>
>
> Of course, I would be calling any python script using these classes from within
> main().
>
> This doesn't compile (using bjam with msvc).  If I return by reference or
> pointers in getb it gets ugly (like pages and pages of error messages).  Am I
> doing this the right way?  How do I expose an instance to python?

-- 
Dave Abrahams
Boost Consulting
www.boost-consulting.com





More information about the Cplusplus-sig mailing list