2010-07-17 33 views
13

क्या पैरामीटर पैक के प्रकारों को बदलना और इसे पास करना संभव है?क्या पैरामीटर पैक में प्रकारों को बदलना संभव है?

उदा।

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 * यहां तक ​​कि उदाहरण भी शामिल हैं जिन्हें मैंने किसी भी तरह से अनदेखा करने में कामयाब रहे :) –

संबंधित मुद्दे