2010-07-17 22 views
13

Có thể chuyển đổi các loại gói tham số và truyền nó không?Có thể chuyển đổi các loại trong gói tham số không?

Ví dụ: trao như sau:

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

Chúng ta có thể xác định một mẫu magic hoặc một cái gì đó tương tự để các khẳng định sau đây giữ:

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

Trả lời

18

Vâng, chúng tôi có thể làm điều đó

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

Ah, * §14.5 .3/5 * thậm chí bao gồm các ví dụ mà tôi bằng cách nào đó đã bỏ qua :) –

Các vấn đề liên quan