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