Tam olarak seçici bir üyeyi uzmanlaşabilir:
template<int N>
struct Vector {
int calculate() { return N; }
};
// put into the .cpp file, or make inline!
template<>
int Vector<3>::calculate() { return -1; }
Tam bir ihtisas yapmak. Bunu gerekiyorsa, enable_if kullanabilirsiniz
template<int N, int P>
struct Vector {
int calculate() { return N; }
};
// WROOONG!
template<int N>
int Vector<N, 3>::calculate() { return -1; }
:
template<int N, int P>
struct Vector {
int calculate() { return calculate<P>(); }
private:
// enable for P1 == 3
template<int P1>
typename enable_if_c<P1 == P && P1 == 3, int>::type
calculate() { return -1; }
// disable for P1 == 3
template<int P1>
typename enable_if_c<!(P1 == P && P1 == 3), int>::type
calculate() { return N; }
};
alternatif bir yaklaşım, bir temel sınıf içine (yaygın malzeme eşyalarını bölmek ve uzman Anlamı kısmi bunu uzmanlaşmak olamaz Nick'in önerdiği gibi türetilmiş bir sınıfa.
Genellikle ikinci yaklaşımı alırdım. Ama eğer kısmi fonksiyonları uzmanlaşmaya ihtiyacım yoksa ilkini tercih ederim.
Daha ayrıntılı bilgi için, bkz. "Öğe 44: Şablondan bağımsız, parametreden bağımsız kod şablonları" Scott Meyers'ın "Etkin C++, Üçüncü Sürüm" –