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 00:46:26


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 mailing list
> Boost-users_at_[hidden]

-- 
Randolph Fritz
  design machine group, architecture department, university of washington
rfritz_at_[hidden] -or- rfritz333_at_[hidden]

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