On 01/30/2012 04:58 PM, Jim Bosch wrote: > On 01/30/2012 09:32 AM, Michael Wild wrote: >> Hi all >> >> I can't seem to figure out how to wrap this in Boost.Python without the >> need for auxiliary functions: >> > > <snip> > >> string& s() { return m_s; } > > The second argument to add_property should be an actual setter, not a > non-const-reference getter. In this case, you can write another free > function that delegates to the non-const-getter, then wrap that: > > void set_s(A & a, std::string const & s) { a.s() = s; } > > ... > > .add_property("s", > make_function( > (string const&(A::*)()const)&A::s, > return_value_policy<copy_const_reference>()), > make_function(&set_set) > ) > > > > HTH > > Jim Bosch
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? Michael _______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@python.org http://mail.python.org/mailman/listinfo/cplusplus-sig