[C++-sig] Boost Python loss of values

Jim Bosch talljimbo at gmail.com
Tue Aug 30 20:09:09 CEST 2011


On 08/30/2011 07:58 AM, Jay Riley wrote:
> Self is indeed a PyObject*
>
> this is a bit confusing
>

I'm afraid my next piece of advice is to simplify this like crazy, and 
see if you can replicate the problem in a very minimal example.  If you 
can get it small enough, I can take a look at the whole thing and see if 
I can figure out what's going on.

Jim



>  > Date: Fri, 26 Aug 2011 13:00:11 -0700
>  > From: talljimbo at gmail.com
>  > To: cplusplus-sig at python.org
>  > Subject: Re: [C++-sig] Boost Python loss of values
>  >
>  > On 08/26/2011 08:27 AM, Jay Riley wrote:
>  > > Hi Jim,
>  > >
>  > > Thanks for the suggestion, unfortunately it didn't work. It really
> feels
>  > > like it's making a copy for some reason as once I return to the
>  > >
>  > > int AttackWrapper::CalculateDamage(const
>  > > std::vector<Game::Battles::BattleCharacter*>& users,
>  > > Game::Battles::BattleCharacter* target, const
>  > > std::vector<Actions::ActionTarget>& targets, Game::Battles::BattleField
>  > > *field)
>  > > {
>  > > return call_method<int>(self, "CalculateDamage", users, ptr(target),
>  > > targets, ptr(field));
>  > > }
>  > >
>  > > function, the value are back to their expected value. Slicing wouldn't
>  > > be a problem here would it, since Hit is a member of the base class
> anyways?
>  > >
>  >
>  > Yes, that's right. What exactly is "self", above? I assume it's a data
>  > member of AttackWrapper of type PyObject *, which shouldn't produce a
>  > copy, but if it's something else, well, that could be a factor.
>  >
>  > Jim
>  >
>  >
>  >
>  > > > Date: Thu, 25 Aug 2011 13:18:04 -0700
>  > > > From: talljimbo at gmail.com
>  > > > To: cplusplus-sig at python.org
>  > > > CC: super24bitsound at hotmail.com
>  > > > Subject: Re: [C++-sig] Boost Python loss of values
>  > > >
>  > > > On 08/25/2011 04:17 AM, Jay Riley wrote:
>  > > >
>  > > > >
>  > > > > And the python exposing is done as follows:
>  > > > >
>  > > > > class_<Attack, AttackWrapper, boost::shared_ptr<Attack>,
> bases<Action>
>  > > > > >("Attack")
>  > > > > .def("CalculateDamage", &AttackWrapper::CalculateDamageDefault);
>  > > > >
>  > > >
>  > > > This bit looks a little suspect, and I'm surprised that it compiles -
>  > > > class_ should only take 4 arguments if one of them is
> boost::noncopyable.
>  > > >
>  > > > I think you mean:
>  > > >
>  > > > class_< Attack, boost::shared_ptr<AttackWrapper>, bases<Action> >
>  > > > (...)
>  > > >
>  > > > See
>  > > >
>  > > > http://www.boost.org/doc/libs/1_47_0/libs/python/doc/v2/class.html
>  > > >
>  > > > for details of the arguments to class_.
>  > > >
>  > > > I don't have a good idea as to why this would cause the problem
> you're
>  > > > seeing (maybe you're slicing your AttackWrapper instances into Attack
>  > > > instances?) but I'd recommend fixing it first.
>  > > >
>  > > > Good Luck!
>  > > >
>  > > > Jim Bosch
>  > >
>  > >
>  > > _______________________________________________
>  > > Cplusplus-sig mailing list
>  > > Cplusplus-sig at python.org
>  > > http://mail.python.org/mailman/listinfo/cplusplus-sig
>  >
>  > _______________________________________________
>  > Cplusplus-sig mailing list
>  > Cplusplus-sig at python.org
>  > http://mail.python.org/mailman/listinfo/cplusplus-sig
>
>
> _______________________________________________
> Cplusplus-sig mailing list
> Cplusplus-sig at python.org
> http://mail.python.org/mailman/listinfo/cplusplus-sig



More information about the Cplusplus-sig mailing list