[C++-sig] to_python converter and make_getter

Jim Bosch talljimbo at gmail.com
Wed Jan 23 17:44:28 CET 2013


On 01/23/2013 12:34 AM, Michael Wild wrote:
> On 01/22/2013 11:27 PM, Jim Bosch wrote:
>> On 01/22/2013 04:18 PM, Michael Wild wrote:
>>> Dear all
>>>
>>> I have defined a to_python converter following
>>> http://misspent.wordpress.com/2009/09/27/how-to-write-boost-python-converters.
>>>
>>> Everything is fine and dandy, however what bugs me is having to specify
>>> a return_value_policy<return_by_value>() for every make_getter call.
>>> Looking through the sources it seems that I should be able to tell
>>> make_getter what the default policy should be by somehow specializing
>>> default_member_getter_policy and default_datum_getter_policy. However,
>>> is this the right way to go, or should I attack the problem at a lower
>>> level, e.g. by specializing default_getter_by_ref? Or should I directly
>>> specialize make_getter?
>>>
>>
>> Could you provide a little more information about what you're trying to
>> do and what the error is?  I'm surprised that you're having to specify a
>> call-policy manually for return-by-value; I've used by-value to_python
>> converters plenty of times without ever having to do that.
>>
>> Jim
>>
>
> I don't have to do it for functions that return by value, only for
> static members that I want to wrap in a static property.
>
> I put the example here: https://gist.github.com/4602341
>

Ah, that makes sense.  Well, if Giuseppe's idea of just converting the 
object once doesn't work for you, I'd recommend not specializing any 
boost::python internals, and just writing a convenience that calls 
make_getter the way you want:

template <typename D>
bp::object my_make_getter(D const & d) {
     return bp::make_getter(
         d,
         bp::return_value_policy<bp::return_by_value>()
     );
}

HTH!

Jim



More information about the Cplusplus-sig mailing list