boost::python> exposing instances from c++

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • TheDustbustr

    boost::python> exposing instances from c++

    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_MO DULE(hello)
    {
    class_<A>("A",i nit<>())
    .def("i", &A::i);
    class_<B>("B",i nit<>())
    .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?
  • David Abrahams

    #2
    Re: boost::python&g t; exposing instances from c++

    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@ao l.com (TheDustbustr) writes:
    [color=blue]
    > 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_MO DULE(hello)
    > {
    > class_<A>("A",i nit<>())
    > .def("i", &A::i);
    > class_<B>("B",i nit<>())
    > .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?[/color]

    --
    Dave Abrahams
    Boost Consulting

    Comment

    Working...