Boost logo

Boost Users :

Subject: Re: [Boost-users] Boost.Python: wrapping OpenSceneGraph smart pointers, again
From: Randolph Fritz (rfritz333_at_[hidden])
Date: 2009-10-20 17:54:20


On 2009-10-20, OvermindDL1 <overminddl1_at_[hidden]> wrote:
>
> Ooo, impressively simple. That should be added to the docs (FAQ at least?).
>

I've put up an improved version at the bottom of:
  <http://wiki.python.org/moin/boost.python/PointersAndSmartPointers>

Hopefully, the next person to come along will have an easier time of it.

Randolph

> On Mon, Oct 19, 2009 at 10:46 PM, Randolph Fritz <rfritz333_at_[hidden]> wrote:
>> It's surprisingly simple, it turns out.
>>
>> First, you have to tag the OSG smart pointer type, as follows:
>> -------------------
>> #ifndef REF_PTR_TRAIT_
>> #define REF_PTR_TRAIT_
>>
>> #include <boost/python.hpp>
>> #include <osg/ref_ptr>
>>
>> namespace boost {
>>  namespace python {
>>    template <class T> struct pointee< osg::ref_ptr<T> >
>>    { typedef T type; };
>>  }}
>>
>> #endif
>> -------------------
>>
>> Then, in a BOOST_PYTHON_MODULE, you can write:
>>
>>  class_<Node, ref_ptr<Node> >("Node", init<>())
>>    ;
>>
>> You can of course add as many of the Node class's methods as desired.
>>
>> Randolph
>>
>> On 2009-10-14, OvermindDL1 <overminddl1_at_[hidden]> wrote:
>>> On Tue, Oct 13, 2009 at 7:34 PM, Randolph Fritz <rfritz333_at_[hidden]> wrote:
>>>> What is wrong with the following code?  I suspect I'm doing something
>>>> silly, and I suspect the answer is obvious.
>>>>
>>>>  #include <osg/Node>
>>>>  #include <osg/ref_ptr>
>>>>
>>>>  #include <boost/python.hpp>
>>>>  #include <boost/python/pointee.hpp>
>>>>
>>>>  using namespace osg;
>>>>  typedef ref_ptr<Node> NodePtr;
>>>>
>>>>  using namespace boost::python;
>>>>
>>>>  BOOST_PYTHON_MODULE(NodePtr) {
>>>>    class_<NodePtr, pointee<NodePtr> >("NodePtr")
>>>>      ;
>>>>  }
>>>
>>> Boost.Python knows Boost and TR1 smart pointers, not any others.  If
>>> you are using any others (ref_ptr in this case I gather) then you need
>>> to make Boost.Python aware of it, I am not sure how, reading through
>>> the code might reveal how.
>


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net