
Hi Kris, thank for your feedback and code! Particularly thanks for boost::make_function_output_iterator, I didn't know about it! As I wrote before my main goal is many cases is standarization. I always prefer to use std::less<int> (now, my nontemplate Less) than writing even a tiny lambda. There is another think I noticed. The compile time of your example is 6,5 times bigger than the compile time of the original example (clang 3.3, 4,5 secondsto 0.7 second). Regards, Piotr On 23 October 2013 12:33, Krzysztof Czainski <1czajnik@gmail.com> wrote:
2013/10/23 Edward Diener
On 10/22/2013 4:16 PM, Piotr Wygocki wrote:
Hi, I've developed a small set of functors and functor adaptors. Although this code is very simple it might be very useful for some subset of the community.
Do you think it might become a part of the boost library? If not I'm still very interested in any feedback. I think it's not big enough to be a separate library. To my knowledge of boost it fits in the utility lib.
The code can be found here:
https://github.com/wygos/**functors https://github.com/wygos/functors
List of utilities:
SkipFunctor takes any number of arguments; does completely nothing
ReturnSomethingFunctor
takes any number of arguments; returns t; IdentityFunctor takes one parameter and returns it.
ReturnFalseFunctor takes any number of arguments; returns false;
ReturnTrueFunctor takes any number of arguments; returns true;
ReturnZeroFunctor takes any number of arguments; returns 0;
AssertFunctor takes any number of arguments; asserts;
ArrayToFunctor<Array> Stores an object which provides operator[]. Provides operator()().
A set of non-template comparison functors (only operator() is templated): * Greater * Less * GreaterEqual * LessEqual * EqualTo * NotEqualTo
FunctorToComparator
This comparator takes a functor "f" and a comparator "c". For elements (x,y) it returns c(f(x), f(y)) c is Less by default FunctorToOutputIterator<**Functor> The output iterator stores a functor and each time the operator= is called the given functor is called
Logical operators as functors: * Not * Or * And * Xor
LiftBinaryOperatorFunctor<**Operator, FunctorLeft, FunctorRight> Functor stores a binary operator "o" and two functors "f" and "g". For given arguments args returns o(f(args), g(args)).
Boolean functor adapters. Each of them stores a boolean functor and performs an appropriate logical operation in the operator().
* NotFunctor<Functor> * OrFunctor
* AndFunctor * XorFunctor Are you aware of Boost.Phoenix ( or its predecessor Boost.Lambda ) ? Also some of the functors appear to duplicate functors in the C++ standard library in functional.
Logical Xor ?
New and useful functors are always welcome but please look at Phoenix first. If you feel you still have new functors maybe you can talk to the Phoenix developers to see if they will fit in Phoenix, or submit your library if there is enough interest by others.
Regards,
Piotr
Hi Piotr,
Like Edward suggested, Boost.Phoenix is your library for these kinds of things and much more.
I had some fun rewriting your examples with Boost.Phoenix, please see the attached file.
I omitted two cases: SkipFunctor and AssertFunctor. I'm not sure how to do that, nor do I see a potential use case for those ;-)
Regards, Kris
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost