2011-10-16 146 views
11

這是C++模板中的有效模板結構嗎?功能上的模板模板參數

template < template <typename T2> class T> 
void foo() { 

} 
+3

@ChrisLutz,我覺得'T2'是可選的。 – iammilind

+0

@ChrisLutz:我想,不是。 http://ideone.com/8jlI5 – Nawaz

+0

@Nawaz - 我記得在某處讀過。我今天似乎只是錯了。我的錯。 –

回答

13

是的。這是有效的。

您可以使用任何類模板調用此函數,其中完全是一個模板參數。例如,

template<typename T> 
struct A 
{ 
    //... 
}; 

foo<A>(); //ok 

注意,您不必爲A類模板,這意味着,以下會導致編譯錯誤模板參數:

foo< A<int> >(); //error 

而且,在你的代碼T2是可選的,而事實上,你不能在函數中使用它,所以最好將其刪除,使定義簡單:

template < template <typename> class T> 
void foo() { 

    T<int> x; //this is how T can be instantiated; provide template argument! 
} 

演示:http://ideone.com/8jlI5

+0

像這種情況下的'T2',它總是可選的嗎?我無法在類模板上使用它。 http://ideone.com/LEt6N – user103214

+0

@ user974191:是的。這從來不是必需的。你不能在模板定義中使用它! – Nawaz