2014-01-15 151 views
1

有人可以給我一些見解爲什麼這個代碼不工作:類具有指向可變參數模板模板參數

template <template <class... Ts> class Derived> 
struct Base 
{ 
    Base(Derived<Ts...>* d_param) : d(d_param) {} 

    Derived<Ts...>* d; 
}; 

我使用GCC 4.8.1。

回答

3

問題是模板模板參數可能具有模板參數的標識符,但它們不可用。根據您的設想使用情況,您需要分別傳遞完整類型或模板及其參數。對於第一種選擇的例子:

template< class Derived > 
struct Base 
{ 
    Base(Derived* d_param) : d(d_param) {} 
    Derived* d; 
}; 

用作

Base< std::map< int, double > > x; 

,或者如果你需要有單獨的參數,你的第二個選項是:作爲

Base< std::map, int, double > x; 
+0

template< template<class...> class Derived, class... Ts > struct Base { Base(Derived<Ts...>* d_param) : d(d_param) {} Derived<Ts...>* d; }; 

第二個是我正在尋找的。謝謝! – kanielc