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