2009-09-12 23 views
20

aşağıdaki şablon uzmanlık kodu:C++ şablon uzmanlık: "açık kalıp bağımsız değişken kaçak kullanım"

template<typename T1, typename T2> 
void spec1() 
{ 

} 

Test durumda 1:

template< typename T1> //compile error 
void spec1<int>() 
{ 

} 

test durumda 2:

template< typename T2> //compile error 
void spec1<int>() 
{ 

} 

, aşağıdaki derleme hatasını üretir:

error C2768: 'spec1' : illegal use of explicit template arguments

Nedenini bilen var mı?

+0

Hangi platform/derleyiciyi kullanıyorsunuz? – aaa90210

+0

Visual C++ 08 – jameszhao00

cevap

51

Fonksiyon şablonları böyle yani sadece tamamen, kısmen özelleşmiş olamaz: fonksiyon şablonları kısmen özelleşmiş olamaz, neden read this isteyebilirsiniz için

template<> 
void spec1<char, int>() 
{ 

} 

.

kısmen (sınıflar için mümkündür) uzmanlaşmak, bunu böyle yapmak zorundayız:

template <typename T1> 
class class1<T1, int> 
{ 

}; 

böylece tekrar T1 listelemek gerekir.

Uzmanlıklarınızın yolu, spec1<int, int> için belirsiz olacaktır.

+3

Ah kullanıyorum, bu yüzden statik işlevlerle gömülü kısmi uzmanlık sınıflarım olabilir? – jameszhao00

+0

Oh, zaten konuyla ilgili konuları açıklayan makaleyi görüyorum. Cevabımı kaldırdım çünkü bir sınıfa iletilmenin bu dava için daha uygun olduğunu keşfettim. Yine de, T1 ve T2'nin fonksiyon parametrelerinin türleri olarak kullanıldığı durumlarda, aşırı yüklenmeyi çok daha fazla okunabilir buluyorum, çünkü o zaman normal fonksiyona aşırı yüklenme gibi. –

+0

"Sadece dersler için mümkün" yazdığımda, ben inerdim. Her iki sınıf ve yapı için de mümkün olduğunu buldum ;-). –

İlgili konular