我想列出类模板,T 1 ,T 2 ,... T N 并列出一个MPL类列表,其中每个模板都使用相同的参数进行实例化。
boost::mpl::list
不能与模板模板参数列表一起使用,只能用于常规类型参数。
所以以下内容不起作用:
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;
我怎样才能让它发挥作用?
答案 0 :(得分:3)
你想要这样的东西:
#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> > ));
答案 1 :(得分:0)
我想你想要这个:
#include <boost/mpl/list.hpp>
#include <boost/mpl/transform.hpp>
using namespace boost;
using mpl::_1;
template<typename T>
struct Test {};
struct T1 {};
struct T2 {};
struct T3 {};
struct T4 {};
template<template <class> class T>
struct ApplyParameterA
{
template<typename A>
struct apply
{
typedef T<A> type;
};
};
typedef mpl::transform<
mpl::list<T1, T2, T3, T4>,
mpl::apply1<ApplyParameterA<Test>, _1>
> TypeList;
这将使
mpl::list<Test<T1>, Test<T2>, Test<T3>, Test<T4>>