我儘量做到以下幾點,我認爲例子應該是自我解釋:模板參數,它也是一個模板參數
template <class CLASS, class PARAM>
void call(){
CLASS<PARAM>::do_something();
}
在第3行CLASS和param之間的角括號,編譯器說:
error: expected unqualified-id
我能解決這個問題,或者它不允許我嘗試做?
我儘量做到以下幾點,我認爲例子應該是自我解釋:模板參數,它也是一個模板參數
template <class CLASS, class PARAM>
void call(){
CLASS<PARAM>::do_something();
}
在第3行CLASS和param之間的角括號,編譯器說:
error: expected unqualified-id
我能解決這個問題,或者它不允許我嘗試做?
參數CLASS
聲明模板是一個class
,或者也可以是typename
,即類型的名稱。
template<typename X> struct A;
這裏A
不是一個類型,它是一個模板。要獲得類型,您需要「應用」(*)模板:A<int>
。
如果你寫了CLASS<PARAM>
,你試圖將類型應用到類型。這不起作用。這就像試圖調用一個值42(parameter)
,只在類型級別。
所以你需要指定CLASS
東西可以應用,這是一個模板:
template <typename T> class CLASS
因此,僅供參考,完整的解決方案是:
template <template <typename T> class CLASS, class PARAM>
void call(){
CLASS<PARAM>::do_something();
}
(*)模板是類型級別的函數:它採用一種或多種類型,並返回一個新類型。
template <
template <typename T> class CLASS,
typename PARAM>
void call()
{
CLASS<PARAM>::do_something();
}
除了@DanielJour和@Nasser給出的答案之外,我想提及的是模板模板參數CLASS
的類型名稱的名稱T
可以省略,因爲它沒有被使用。因此,濃縮液是這樣的:
template <template <typename> class CLASS, typename PARAM>
void call()
{
CLASS<PARAM>::do_something();
}
[C++中模板模板參數有什麼用處?](http://stackoverflow.com/questions/213761/what-are-some-uses-of-template-template-parameters-in- c) – soon
你如何期望*使用*這個?也許'請致電()'?或者'撥打< vector>()'?後者可能會改變'call'的簽名。 –