c++ - How to chain/queue up functors? -
i not using c++11 (otherwise use lambdas)
i have iterators input data structure , output data structure. want operations on input data , store result in output. note start , end types may different (int -> float example).
i tried model function after standard algorithms , gave following prototype
template<class input_itr, output_itr> void f(input_itr in_it, input_itr in_it_end, output_itr out_it, contextstuff)   the function many different things depending on context. function needs use 1 functor, line of code looks this
transform(in_it, in_it_end, out_it, functor1());   but function wants use series of functors on each data element. there way can create chain of functors single functor use in transform? functors chain known @ compile type.
for example
transform(in_it, in_it_end, out_it, chain(functor1(), functor2()));   performs functor1 on *in, functor2 on result, stores in *out.
i can inherit functors unary_function solution.
try this:
template<class callable1, class callable2> struct chain : public std::unary_function<     typename callable2::argument_type, typename callable1::result_type> {     chain(const callable1 &f1, const callable2 &f2) : f1(f1), f2(f2) {}      typename callable1::result_type operator () (            typename callable2::argument_type param)      {          return f1(f2(param));     } private:     callable1 f1;     callable2 f2; };  template<class callable1, class callable2> chain<callable1, callable2> chain(const callable1 &f1, const callable2 &f2) {     return chain<callable1, callable2>(f1, f2); }   the chain class functor combines 2 other functors. since it's unary_function should able combine further. chain function lets create chain instance without having worry types.
usage example: http://ideone.com/7qpmeu
Comments
Post a Comment