boost::python> exposing instances from c++

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


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 Python-list mailing list