[C++-sig] Contructor with "with_custodian_and_ward_postcall"

Renato Araujo renatox at gmail.com
Mon Nov 3 20:09:12 CET 2008


I will explain this more.


First I have a c++ class like this:

struct object
{
      object(object *parent=0)  // if parent !=NULL append this at
parent children list
      ~object() //Destroy all children
};


Is possible implement this using "python::with_custodian_and_ward_postcall"?
I tried some like that:

 qclass_<object_wrapper, boost::noncopyable > ("object", python::init<> ())
    //here i put self will be the ward and arg 2 (parent) will be the
custodian or

    .def(python::init<object*>()[python::with_custodian_and_ward_postcall<2,1>()])




On Mon, Nov 3, 2008 at 12:48 PM, Renato Araujo <renatox at gmail.com> wrote:
> Hi all,
>
> Im trying create a binding for the flowing example:
>
> C++
> ========
>
> struct object
> {
>     object(object *parent);
> };
>
> when the object parent is destroyed then all children will be destroyed too.
>
>
> How I can solve this with boost::python?
>
> I'm trying in this way:
>
> object_wrapper* _ojbect_constructor(object_wrapper* parent)
> {
>       return new object_wrapper(parent);
> }
>
>  qclass_<object_wrapper, boost::noncopyable>("MyObject",
> python::no_init)     .def("__init__",
> python::make_constructor(_ojbect_wrapper_constructor,
> python::with_custodian_and_ward_postcall<0, 1>()))
>
>
> But this not compile, because the "with_custodian_and_ward" need a
> function with 2 args like (self, parent) how can I solve this problem?
>
>



-- 
Renato Araujo Oliveira Filho


More information about the Cplusplus-sig mailing list