"David Abrahams" <[EMAIL PROTECTED]> wrote in message
[EMAIL PROTECTED]">news:[EMAIL PROTECTED]...
> Hugo Duncan <[EMAIL PROTECTED]> writes:
>
> > I am trying to use MPL to generate code.
> >
> > I have a list of types, which I would like to use to call a template
> > function with arguments that are not dependent on the list.
> >
> > eg
> >
> > given:
> >   template <typename T> void my_function(std::string& s);
> >   typedef list<int, float, double> my_list;
> >   std::string s;
> >
> > what do I write using MPL to generate the equivalent of the following ?
> >
> >   my_function<int>(s);
> >   my_function<float>(s);
> >   my_function<double>(s);
>
> With the latest CVS, it would be something like this:
>
>     struct func
>     {
>         func(std::string& s) : s(s) {}
>
>         template <class T>
>         void operator()(T) const
>         {
>             my_function<T>(s);
>         }
>
>      private:
>          std::string& s;
>     };
>
>     mpl::for_each<my_list>(func(s));
>
> If you have any reference or array types in my_list, you might need to
> do this instead:
>
>
>     struct func
>     {
>         func(std::string& s) : s(s) {}
>
>         template <class T>
>         void operator()(mpl::identity<T>) const
>         {
>             my_function<T>(s);
>         }
>
>      private:
>          std::string& s;
>     };
>
>     mpl::for_each<my_list, mpl::make_identity<> >(func(s));

Or (barring my lack of mastering some syntactic details):

inline void do_my_function(string&, void_) {}

template <class Lst>
inline void do_my_function(string& s, Lst lst)
{
    my_function<front<Lst>::type>(s);
    do_my_function(s, pop_front<Lst>::type());
}
...
do_my_function(s, my_list());

No struct, no for_each, no operator(). Et que le meilleur gagne :o).


Andrei



_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to