Re: [Boost-bugs] [Boost C++ Libraries] #2049: extracting c++ pointer from python object with multiple parents

Subject: Re: [Boost-bugs] [Boost C++ Libraries] #2049: extracting c++ pointer from python object with multiple parents
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2008-06-26 14:56:35


#2049: extracting c++ pointer from python object with multiple parents
-----------------------------------+----------------------------------------
  Reporter: bloodyfanatic_at_[hidden] | Owner: dave
      Type: Bugs | Status: closed
 Milestone: Boost 1.35.1 | Component: Python
   Version: Boost 1.35.0 | Severity: Problem
Resolution: invalid | Keywords:
-----------------------------------+----------------------------------------
Comment (by anonymous):

 Replying to [comment:3 dave]:
> Replying to [comment:2 bloodyfanatic_at_[hidden]]:
> > Replying to [comment:1 dave]:
> > > Does this fail even when the dtors are non-virtual?
> >
> > yes it does, with the same error as always:
>
> In that case, please post the ''fully reduced'' test case
>
> Also, you need an __init__ method in both1 and both2 that initializes
 *both* bases or this can never work, because a wrapped class' __init__
 function is what actually constructs the C++ base object. Without it,
 there is no base object to which a pointer can be returned from
 {{{extract}}}:
> {{{
> def __init__(self):
> Base1.__init__(self)
> Base2.__init__(self)
> }}}
> I don't know how to do this properly with super (the technique Stefan
 was suggesting), but his suggestion as written didn't take care of both
 bases, as the following demonstrates:
>
> {{{
> #!python
> >>> class X(object):
> ... def __init__(self):
> ... print 'X'
> ...
> >>> class Y(object):
> ... def __init__(self):
> ... print 'Y'
> ...
> >>> class Z(X,Y): pass # essentially what you posted
> ...
> >>> z = Z()
> X
> >>> class Z(X,Y):
> ... def __init__(self):
> ... super(Z,self).__init__() # Stefan's suggestion
> ...
> >>> z = Z()
> X
> >>> class Z(X,Y):
> ... def __init__(self):
> ... X.__init__(self)
> ... Y.__init__(self)
> ...
> >>> z = Z()
> X
> Y
> >>>
> }}}
>
> I'm pretty sure this solves your problem so I'm closing the ticket, but
 if it doesn't, please re-open it.

 just tested that and it works. Thank you very much :)

--
Ticket URL: <http://svn.boost.org/trac/boost/ticket/2049#comment:4>
Boost C++ Libraries <http://www.boost.org/>
Boost provides free peer-reviewed portable C++ source libraries.


This archive was generated by hypermail 2.1.7 : 2017-02-16 18:49:58 UTC