2011-10-16 39 views
11

Bu geçerli şablon yapısı C++ şablonlarında mı?Şablon şablon parametresi işlevi

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

} 
+3

@ChrisLutz, sanırım T2' isteğe bağlı. – iammilind

+0

@ChrisLutz: Bence, gerçekten değil. http://ideone.com/8jlI5 – Nawaz

+0

@Nawaz - Bunu bir yerlerde okumayı hatırlıyorum. Bugün her yerde yanlış görünüyorum. Benim hatam. –

cevap

13

Evet. Geçerli.

Sen tam bir şablon parametre alan herhangi bir sınıf şablonu ile bu işlevi çağırabilir. Kodunuzdaki,

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

Ayrıca: Örneğin, yok

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

foo<A>(); //ok 

Not A sınıf şablonu anlamına gelen şu derleme hatasına neden olur için şablon argümanı sağlamak T2 isteğe bağlıdır ve aslında, tanım daha basit hale getirmek için o kadar iyi olur, fonksiyonda kullanın kaldıramazsınız:

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

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

Demo: http://ideone.com/8jlI5

+0

Bu durumda 'T2' gibi, her zaman isteğe bağlı mı? Sınıf şablonlarında da kullanamadım. http://ideone.com/LEt6N – user103214

+0

@ user974191: Evet. Bu asla gerekli değildir. Bunu şablon tanımında kullanamazsınız! – Nawaz

İlgili konular