2015-12-09 155 views
4

嗯,這就是我想要實現的。我有這樣的結構:模板類,其參數必須是另一個模板類

​​

現在我想寫一個多模板結構:

template<typename r> struct q 
{ 
    // 
}; 

模板應該接受的struct r專業化,我想有機會獲得模板這個實例的參數。

爲了讓自己更清楚:我希望能夠寫這樣的事:

using some_specialisation_of_q = q< s<T1,T2,T3>::r<5,6,7> >; 
some_specialisation_of_q varname; 

,我想能夠有T1,T2,T35,6,7訪問(或任何其他模板在q的定義中傳遞給專用sr的參數)。

我第一次嘗試類似的東西:

template<template<typename...Ts> template<int...Is> typename R, typename= typename std::enable_if<std::is_same<R, s<Ts...>::r<Is...>>::value>::type> 
struct q 
{ 
    // 
} 

但不幸的是這將產生編譯器錯誤。

這是如何實現的?

+0

'r'將發佈'TS ...'提取。否則,這是一個非推斷的上下文。 –

回答

0

首先,在沒有合作的情況下,無法從r的專業化推導出Ts...。因此,讓我們發佈類型:

template<typename...Ts> struct s 
{ 
    template<int...Is> struct r 
    { 
     using outer_type = s; 
    }; 
}; 

然後用偏特

template<class T, class = typename T::outer_type, class = T> 
struct q; 

template<template <int...> class R, class...Ts, int...Is> 
struct q<R<Is...>, s<Ts...>, typename s<Ts...>::template r<Is...>>{ 
}; 
相關問題