I want to take a list of class templates, T1, T2, ... TN and have a list an MPL list of classes, where each template is instantiated with the same parameter.
boost::mpl::list
cannot be used with a list of template template parameters, just regular type parameters.
So the following does not work:
class A { ... };
template<template <class> class T>
struct ApplyParameterA
{
typedef T<A> Type;
}
typedef boost::mpl::transform<
boost::mpl::list<
T1, T2, T3, T4, ...
>,
ApplyParameterA<boost::mpl::_1>::Type
> TypeList;
How can I make it work?
You want something like this:
#include <boost/mpl/list.hpp>
#include <boost/mpl/apply_wrap.hpp>
#include <boost/mpl/transform.hpp>
#include <boost/mpl/equal.hpp>
#include <boost/mpl/assert.hpp>
using namespace boost::mpl;
template< typename U > class T1 {};
template< typename U > class T2 {};
template< typename U > class T3 {};
class MyClass;
typedef transform<
list< T1<_1>, T2<_1>, T3<_1> >
, apply1<_1,MyClass>
>::type r;
BOOST_MPL_ASSERT(( equal< r, list<T1<MyClass>,T2<MyClass>,T3<MyClass> > ));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With