On 01/23/2013 05:44 PM, Jim Bosch wrote:
> 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
> 


Yes, I thought of that too. While this "solves" this case (it certainly
is not very discoverable for future maintainers), it does not help in
the case of container support. Say I wanted to expose
std::vector<QString> (or std::vector<ustom_string> from the Boost.Python
FAQ, for that matter) using the boost::python::vector_indexing_suite. I
am perfectly able to create such a list, I can append items, the only
thing I can't do is *retrieving* them. It's like a black hole for data ;-)

Michael
_______________________________________________
Cplusplus-sig mailing list
Cplusplus-sig@python.org
http://mail.python.org/mailman/listinfo/cplusplus-sig

Reply via email to