[C++-sig] contained structure access
David Abrahams
dave at boost-consulting.com
Thu Nov 14 18:30:15 CET 2002
David Abrahams <dave at boost-consulting.com> writes:
> Graeme Lufkin <gwl at u.washington.edu> writes:
>
>> I've found some strange (I think) behavior in Boost.Python, and I've
>> boiled it down to the example below.
<snip>
>
>> I can create variables of type Atom, and get/set it's 'x' member
>> variable fine. I can also create variables of type Holder, and get/set
>> its 'a' member variable (of type Atom). However, when I try to modify
>> the 'x' of the Holder's Atom, it is ignored. I can recreate this
>> situation using regular 100% Python classes, and it works as expected.
>> So, what am I doing wrong?
>
> you'll see that make_getter with one argument uses the default call
> policies, which copy of all return values. What's happening is that
> the x member is getting set in the copy.
>
> Instead, you could use
>
> this->add_property(
> name
> , make_getter(&Holder::a, return_internal_reference<>())
> , make_setter(&Holder::a));
>
> Which should get you the behavior you want. I'll look into fixing it
> so this is no longer needed, if I can find a few minutes to spend on
> it.
Done. See
http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/*checkout*/boost/boost/libs/python/doc/v2/data_members.html#make_getter-spec
--
David Abrahams
dave at boost-consulting.com * http://www.boost-consulting.com
Boost support, enhancements, training, and commercial distribution
More information about the Cplusplus-sig
mailing list