[C++-sig] Boost.Python property definition question
Jim Bosch
talljimbo at gmail.com
Tue Jan 31 21:11:03 CET 2012
On 01/31/2012 02:52 PM, Michael Wild wrote:
>> You might be able to address that by having two make_helper functions,
>> using enable_if/disable_if to select one when the return type is const
>> and the other when it isn't. The one invoked for const returns would
>> just call make_function directly to make a getter, while the non-const
>> one would be like make_set_helper above.
>>
>>
>> Jim
>
> Sorry, I think you'll have to expand a bit on that. Do you mean that I
> can use enable_if/disable_if to select between the two implementations?
>
I think so; again, I haven't tested.
Here's the idea:
template <typename F>
typename boost::enable_if<
boost::is_const<
typename boost::function_types::result_type<F>::type
>,
bp::object
>::type
make_helper(F f) {
// deduce A and T ...
return bp::make_function(
(A const & (T::*() const))f,
bp::return_value_policy<copy_const_reference>()
);
}
template <typename F>
typename boost::disable_if<
boost::is_const<
typename boost::function_types::result_type<F>::type
>,
bp::object
>::type
make_helper(F f) {
// deduce A and T ...
return bp::make_function(&set_helper<A,T,f>);
}
Hope that works!
Jim
More information about the Cplusplus-sig
mailing list