On 17 June 2012 22:16, vikas chauhan <presentisg...@gmail.com> wrote:
> > > On 17 June 2012 15:45, <cplusplus-sig-requ...@python.org> wrote: > >> Send Cplusplus-sig mailing list submissions to >> cplusplus-sig@python.org >> >> To subscribe or unsubscribe via the World Wide Web, visit >> http://mail.python.org/mailman/listinfo/cplusplus-sig >> or, via email, send a message with subject or body 'help' to >> cplusplus-sig-requ...@python.org >> >> You can reach the person managing the list at >> cplusplus-sig-ow...@python.org >> >> When replying, please edit your Subject line so it is more specific >> than "Re: Contents of Cplusplus-sig digest..." >> >> >> Today's Topics: >> >> 1. wrapping generic getter/setter functions in boost.python >> (vikas chauhan) >> 2. Re: wrapping generic getter/setter functions in boost.python >> (Jonas Wielicki) >> >> >> ---------------------------------------------------------------------- >> >> Message: 1 >> Date: Sat, 16 Jun 2012 21:42:56 +0545 >> From: vikas chauhan <presentisg...@gmail.com> >> To: cplusplus-sig@python.org >> Subject: [C++-sig] wrapping generic getter/setter functions in >> boost.python >> Message-ID: >> < >> cag2q8sbd4cgeh9gx9mnj6xyaretp5vql_wutfo6aiqnzcpr...@mail.gmail.com> >> Content-Type: text/plain; charset="iso-8859-1" >> >> Hi all, >> I am pretty new to boost.python and I have been getting some problems >> wrapping generic getter/setter functions. >> Say for eg. we have class like this. >> >> class X{ >> int a[10]; >> public: >> int geta(int index) throw(some_exception) { >> if(index >= 10 || index <0) >> throw some_exception; >> return a[index]; >> } >> void seta(int index, int val) throw(some_exception) { >> if(index >= 10 || index < 0) >> throw some_exception; >> a[index] = value; >> } >> }; >> >> I want to add attributes like a0, a1, a2,.. a9 in my python class, wherein >> a0 corresponds to a[0] , a1 to a[1] and likewise. >> In the boost.python docs ( exposing Class properties ), getter/settter >> functions are documented for single value only. >> Is it possible to do what I want ( i.e add separate attributes using the >> single geta()/seta() functions ) or I need to write some kind of wrapper >> functions (each for accessing each a[i]) ? >> >> i.e, what I want to do is something like this. >> >> BOOST_PYTHON_MODULE(mymod) >> { >> using namespace boost::python; >> >> class_<X>("X") >> .add_property("a0", &X::geta, &X::seta) >> .add_property("a1", &X::geta, &X::seta) >> .. >> .. >> ; >> } >> >> and passing the arguments to geta ( i.e 0, 1,.. etc ) in someway. >> >> So, basically what I want is , to avoid unnecessary code bloat. >> >> regards, >> vikas >> -------------- next part -------------- >> An HTML attachment was scrubbed... >> URL: < >> http://mail.python.org/pipermail/cplusplus-sig/attachments/20120616/53a515d4/attachment-0001.html >> > >> >> ------------------------------ >> >> Message: 2 >> Date: Sat, 16 Jun 2012 18:14:34 +0200 >> From: Jonas Wielicki <j.wieli...@sotecware.net> >> To: Development of Python/C++ integration <cplusplus-sig@python.org> >> Subject: Re: [C++-sig] wrapping generic getter/setter functions in >> boost.python >> Message-ID: <4fdcb0ea.3000...@sotecware.net> >> Content-Type: text/plain; charset=UTF-8 >> >> On 16.06.2012 17:57, vikas chauhan wrote: >> > Is it possible to do what I want ( i.e add separate attributes using >> the >> > single geta()/seta() functions ) or I need to write some kind of wrapper >> > functions (each for accessing each a[i]) ? >> I guess the simplest way to do that is to template the geta and seta >> function similar to this one: >> >> class X { >> template <int index> >> int geta() throw(foo) { >> return a[index]; >> } >> // ... >> } >> >> you then somehow need to force instanciation I guess, maybe a plain >> >> // ... >> .add_property("a0", &X::geta<0>) >> >> does the trick, but I doubt it. This just as a suggestion for a >> direction to do research in, I did not try it, neither I would bet that >> it works ;) >> >> cheers, >> Jonas >> >> >> ------------------------------ >> >> _______________________________________________ >> Cplusplus-sig mailing list >> Cplusplus-sig@python.org >> http://mail.python.org/mailman/listinfo/cplusplus-sig >> >> End of Cplusplus-sig Digest, Vol 45, Issue 15 >> ********************************************* >> > > Hi Jonas, > thanks a lot for your suggestions. It actually worked !! > > cheers, > vikas > Hi, there is one more thing. In the above wrapped python class, the attributes a0, a1 etc will appear under class X. what if I want to group these attributes in another class ( thus adding an extra level hierarchy between X and the attributes ) object which itself is an attribute of X. i.e I don't want X.a0, X.a1 etc, but something like X.y.a0, X.y.a1 , where y is a dummy class object. Is there any way to do that ? I tried using scopes and all that, but it didn't work. cheers, vikas
_______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@python.org http://mail.python.org/mailman/listinfo/cplusplus-sig