On 01/30/2012 07:28 PM, Jim Bosch wrote: > On 01/30/2012 12:11 PM, Michael Wild wrote: >> That's what I've been referring to as "auxiliary" functions. If >> possible, I'd like to avoid them because I don't fancy writing hundreds >> of those... I could live with calling a template. However, so far I >> haven't been able to come up with one that is sufficiently easy to use... >> >> So far I came up with the this: >> >> template<class ArgType, class T, T&(C::*method)()> >> void set_helper(T& self, ArgType& arg) >> { >> (self.*method)() = arg; >> } >> >> But it is a bit cumbersome to use, as it doesn't deduce its first two >> template arguments on its own. Is there any way to achieve that feat? >> > > If you're up for playing with Boost.FunctionTypes, you should be able to > write a wrapper for make_function that deduces those types for you: > > namespace bp = boost::python; > > template <typename A, typename T, A&(T::*method)()> > void set_helper(T & self, A const & arg) { > (self.*method)() = arg; > } > > template <class F> > bp::object make_set_helper(F f) { > // F is the member function type; use Boost.FunctionTypes to > // figure out A and T, then... > return bp::make_function(&set_helper<A,T,f>); > } > > > I'll leave it to you to fill in the details. I haven't tried it myself, > but I think it would work. > > > Jim
Thanks for that hint, I'll certainly take a look. The only think that would bother me with this solution is that I would need to disambiguate between the non-const and const functions with the casting operator again. Michael _______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@python.org http://mail.python.org/mailman/listinfo/cplusplus-sig