2014-05-13 74 views
2

是否可以設置模板的一些參數並將其餘的仍然保留爲模板參數?就像創建新的模板類一樣,與第一個模板類相同,但具有較少數量的模板參數。設置幾個模板參數的值

A不能解釋清楚。也許有幾行代碼有幫助。

template<int A, typename B> 
class XXX 
{ 
    //Some code 
}; 

template<template<typename> class C> 
class YYY 
{ 
    //Some code 
}; 

template<int D> 
class ZZZ 
{ 
    YYY<XXX<D> > object; //This is wrong. How to do it? 
}; 

我找不到任何使這成爲可能的機制。

編輯 我選擇了不正確的例子。該類ZZZ應該是這樣的:

template<int D> 
class ZZZ : public YYY<XXX<D> > 
{ 
    //Some code 
}; 

回答

1
template<class T>using WWW=XXX<D,T>; 

,或者如果你沒有空間做using說法:

template<int D>struct WW{ 
    template<class T>using W=XXX<D,T>; 
}; 

template<int D> 
class ZZZ : public YYY<WW<D>::template W> 

我建議使用不同的名稱。

+0

MinGW的打印錯誤:'預期的類型,有「W''。添加關鍵字'typename'解決了這個問題。而且,最後一行中的'template'會導致錯誤:'template argument 1 is invalid'。程序沒有這個關鍵字。 –

+0

儘管如此,你的答案解決了這個問題。 –

0

Yakk的回答讓我意識到我可以創建定義新類的結構。

template<int E> 
struct SetPrameter 
{ 
    template<typename T> 
    using XXX = XXX<E, T>; 
}; 

我可以用這種方式:

template<int D> 
class ZZZ : public YYY<typename SetPrameter<D>::XXX> 
{ 
    //Some code 
}; 
+0

'typename'不正確,你沒有公開依賴類型,你正在暴露一個依賴的'template'。 – Yakk

+0

我測試了這段代碼。它編譯。 'Typename'告訴編譯器'SetPrameter :: XXX'是一個類型,而不是變量或函數。 我不需要通知編譯器它是一個模板。 –