Prev: Detecting pointer on the heap
Next: warning: dereferencing pointer does break strictaliasing rules
From: Mathias Gaunard on 31 Mar 2010 23:08 On Mar 31, 11:36 pm, "Thiago A." <thiago.ad...(a)gmail.com> wrote: > Using function notation we have expressions like that: > > F(G(H(X))) > > [...] > > For instance, we could write: > > matrix.Rotate(pi).ReflectHor().Inverse(); This works fine, but the main problem is that it is intrusive: you need to have such functions declared as members of the returned types. Using operator overloading, you can avoid this issue. Consider matrix  Rotate(pi)  ReflectHor()  Inverse() Such syntax is used by the new extension to Boost.Range.  [ See http://www.gotw.ca/resources/clcm.htm for info about ] [ comp.lang.c++.moderated. First time posters: Do this! ]
From: Thiago A. on 1 Apr 2010 02:16 > But in your case you don't need to. > Just have every algorithm function (like Rotate()) > return a reference to a (nonlocal) object that defines other needed > functions, like ReflectHor() The problem of memberfunction is to repeat the same algorithm in each class, or to have to create a nonmember function and call it from each memberfunction. Consequently each class must know each algorithm. Apart of that, sometimes you cannot change the class code, like std::vector or the type is not a class. For instance: 2.pow(3); int operator . pow (int a, int b) { return pow(a, b); }  [ See http://www.gotw.ca/resources/clcm.htm for info about ] [ comp.lang.c++.moderated. First time posters: Do this! ]
From: Thiago A. on 1 Apr 2010 02:17 > > Using function notation we have expressions like that: > > > F(G(H(X))) > > > [...] > > > For instance, we could write: > > > matrix.Rotate(pi).ReflectHor().Inverse(); > > This works fine, but the main problem is that it is intrusive: you > need to have such functions declared as members of the returned types. > Using operator overloading, you can avoid this issue. > > Consider matrix  Rotate(pi)  ReflectHor()  Inverse() > Such syntax is used by the new extension to Boost.Range. I agree. In the matrix sample, the operator * could be used. But considering generic samples the math operators can be VERY confusing. Maybe the general idea is to create �named� operators like "pow". 2 + 2 pow 3; However in this case we should also declare the precedence and this also would be very confusing. I think that the dot operator would be simpler because the precedence is the same we use in class members. 2 + 2.pow(3)  [ See http://www.gotw.ca/resources/clcm.htm for info about ] [ comp.lang.c++.moderated. First time posters: Do this! ]
From: achp on 1 Apr 2010 02:17 On Apr 1, 2:36 am, "Thiago A." <thiago.ad...(a)gmail.com> wrote: > However in some cases, I would prefer to read expression from left to > right applying the next function in the previous result. > > H(x) G() F() I don't think you can have it that way. However, you might choose to have it this way: apply(x, H, G, F); where template<class T> T apply(T x) { return std::forward<T>(x); } template<class T, class F1, class... Fn> auto apply(T x, F1 f1, Fn... fn) > decltype(apply(f1(x), std::forward<Fn>(fn)...)) { return apply(f1(x), std::forward<Fn>(fn)...); } Sorry for mistakes, I have not tested it, but you probably got the idea.  [ See http://www.gotw.ca/resources/clcm.htm for info about ] [ comp.lang.c++.moderated. First time posters: Do this! ]
From: Seungbeom Kim on 1 Apr 2010 06:54 On 20100401 07:08, Mathias Gaunard wrote: > On Mar 31, 11:36 pm, "Thiago A."<thiago.ad...(a)gmail.com> wrote: >> >> For instance, we could write: >> >> matrix.Rotate(pi).ReflectHor().Inverse(); > > This works fine, but the main problem is that it is intrusive: you > need to have such functions declared as members of the returned types. > Using operator overloading, you can avoid this issue. This is a valid concern. Then how about defining one function that can call arbitrary operations: matrix.apply(Rotate, pi).apply(ReflectHor).apply(Inverse); > Consider matrix  Rotate(pi)  ReflectHor()  Inverse() > Such syntax is used by the new extension to Boost.Range. I like this syntax, too!  Seungbeom Kim [ See http://www.gotw.ca/resources/clcm.htm for info about ] [ comp.lang.c++.moderated. First time posters: Do this! ]
First

Prev

Next

Last
Pages: 1 2 3 Prev: Detecting pointer on the heap Next: warning: dereferencing pointer does break strictaliasing rules 