2010-07-17 30 views
13

是否可以转换参数包的类型并将其传递?是否可以转换参数包中的类型?

E.g.给出以下几点:

template<class... Args> struct X {}; 
template<class T> struct make_pointer  { typedef T* type; }; 
template<class T> struct make_pointer<T*> { typedef T* type; }; 

我们可以定义模板magic或类似的东西,以便以下断言成立:

typedef magic<X, make_pointer, int, char>::type A; 
typedef X<int*, char*> B; 
static_assert(is_same<A, B>::value, ":("); 

回答

18

是的,我们能做到这一点

template<template<typename...> class List, 
     template<typename> class Mod, 
     typename ...Args> 
struct magic { 
    typedef List<typename Mod<Args>::type...> type; 
}; 
+1

啊,*§14.5 .3/5 *甚至包括我以某种方式设法忽略的例子:) – 2010-07-17 23:14:02

相关问题