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));

HTH,
Dave

-- 
                       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

Reply via email to