[C++-sig] Boost v2 questions
dave at boost-consulting.com
Mon Aug 19 16:53:55 CEST 2002
----- Original Message -----
From: "Stefan Franke" <franke at ableton.com>
> thanks a lot for this informative answer. v2 seems to be exactly
> what I need.
> BTW: The link to the pointee type in the docs doesn't seem to work:
> and specialize the pointee<> template appropriately
> (sorry, no docs - see boost/python/pointee.hpp).
David Abrahams * Boost Consulting
dave at boost-consulting.com * http://www.boost-consulting.com
> > -----Original Message-----
> > From: c++-sig-admin at python.org [mailto:c++-sig-admin at python.org]On
> > Behalf Of David Abrahams
> > Sent: Monday, August 19, 2002 2:28 PM
> > To: c++-sig at python.org
> > Subject: Re: [C++-sig] Boost v2 questions
> > From: "Stefan Franke" <franke at ableton.com>
> > > I have an application where I want to enable the user to write
> > > extension scripts which can access parts of the document. Think
> > > of a vector drawing program with graphical object the user can
> > > manipulate and assign properties to. Consider the following
> > > hypothetical script using two wrapped C++ classes Canvas and
> > > Shape:
> > >
> > > s = canvas().getShapeByName("myshape")
> > > # canvas() returns a CanvasWrapper instance
> > > # s is of class ShapeWrapper
> > >
> > > s.x = 100 # x: member of C++ class as a Python attribute
> > > s.mydata = [1, 2] # User assigned Pyton data
> > >
> > > canvas().deleteShape("myshape")
> > > print s.x # Access C++ member
> > >
> > > Traceback (most recent call last):
> > > File "<interactive input>", line 1, in ?
> > > ReferenceError: Cannot access property 'x' of object 's'.
> > I can't tell from the above whether you're illustrating a
> > problem, desired
> > behavior, or something else. Also, since I can't see your C++
> > code I can't
> > tell how you got there.
> > > Here my questions:
> > > 1. Is it possible that an instace of the Boost-generated class
> > > ShapeWrapper has an instance dictionary that the user can assign
> > > values to?
> > Not only possible, but true.
> > > 2. The C++ function Canvas::deleteShape() deletes the shape. This
> > > is existing functionality that can hardly be changed. I'd like to
> > > have weak referencing behaviour for almost all of my
> > wrapped objects.
> > > There already exists a weak pointer type for my C++ classes that I
> > > can easily extend.
> > >
> > > Is it possible to instruct Boost not to hold a plain pointer to the
> > > C++ instance inside its wrapper objects, but one of my smart
> > > pointers?
> > Sure. Have you looked at
> > http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/*checkout*/boos
> > t/boost/libs/
> > python/doc/v2/class.html#class_-spec?
> > You can simply specify your own smart pointer as the HeldType
> > parameter,
> > and specialize the pointee<> template appropriately (sorry,
> > no docs - see
> > boost/python/pointee.hpp).
> > > And further, is it possible to get a Python exception whenever a
> > > member function of a dangling object is called? I envision
> > to put the
> > > checks into the dereferencing operators of my smart pointer type and
> > > then throwing a C++ exception to signal to Boost that the operation
> > > has failed.
> > Perfect. Just install a Python exception translator for your
> > C++ exception
> > as neccessary:
> > http://mail.python.org/pipermail/c++-sig/2002-August/001922.html
> > > Are my desires too far-fetched? OTOH I'd say this behaviour
> > is pretty
> > > standard whenever you want to enable user scripting for an existing
> > > application.
> > >
> > > Or am I missing something obvious and there's an easier way to
> > > achieve the same thing?
> > Easier than what?
> > > Note that I neither want to check object
> > > validity on the Python side (user scripting should be as easy as
> > > possible) nor write dedicated C++ classes like "ShapeAccessor" or
> > > "CanvasAccessor" that implement the validity checks (since there are
> > > just too many classes to wrap and I'd loose one of Boosts major
> > > advantage then).
> > Let me know if this has failed to help you.
> > -----------------------------------------------------------
> > David Abrahams * Boost Consulting
> > dave at boost-consulting.com * http://www.boost-consulting.com
> > _______________________________________________
> > C++-sig mailing list
> > C++-sig at python.org
> > http://mail.python.org/mailman/listinfo/c++-sig
> C++-sig mailing list
> C++-sig at python.org
More information about the Cplusplus-sig