|
Boost : |
From: David Abrahams (dave_at_[hidden])
Date: 2003-01-22 18:26:17
Hugo Duncan <hugoduncan_at_[hidden]> 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 dave_at_[hidden] * http://www.boost-consulting.com Boost support, enhancements, training, and commercial distribution
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk