|
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