"Joel de Guzman" <[EMAIL PROTECTED]> writes: > ----- Original Message ----- > From: "Aleksey Gurtovoy" <[EMAIL PROTECTED]> > >> My current understanding (which, admittedly, is not backed up by a >> real-world experience) is that if you care about higher-orderness of your >> generic algorithms, a preferred implementation construct for those >> algorithms is not a function template, but a static _function object_ (a >> technique used in FC++): >> >> struct my_function_ >> { >> template< typename U > >> void operator()(std::string const& text, U) >> { >> // ... >> } >> >> } my_function; // here! >> >> >> For ordinary uses, the above will act just like a plain function template >> (minus ADL/explicit template arguments specification): >> >> my_function("text", int()); >> >> and it will also allow one to do something like this: >> >> std::string text("text"); >> mpl::for_each< my_types >(boost::bind<void>(my_function, text, _1)); > > This technique is adopted by Phoenix. With this, you can even do > (as suggested by Joel Young): > > - \ \ > double - /\ f . /\ x. f(f x) > - / \ / \ > > struct square_ { > > template <typename X> > struct result { typedef X type; }; > > template <typename X> > X operator()(X x) > { > return x * x; > } > };
This is similar to my "universal identity" suggestion from many months back. However, "result" should be "apply" to make it an MPL metafunction class <wink>. Hum, that result template looks like identity, and not square. Am I missing something? I'd have thought: template <typename X> struct result : mpl::times<X,X> {}; > function<square_> square; > > template <typename F> > struct ffx { > > template <typename X> > struct result { typedef X type; }; Mighty confused. Not template <typename X> struct result : mpl::apply<F, typename mpl::apply<F,X>::type> {}; ?? If not, what's the point of "result"? > PS> Jaakko and I are working on the LL/Phoenix merger. Yay! What about my tuples question? -- David Abrahams [EMAIL PROTECTED] * http://www.boost-consulting.com Boost support, enhancements, training, and commercial distribution _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost