Bu yapı nedir: şablon <int> void funcName (int i)?
Yanlışlıkla bir şablon işlevi uzmanlaşmasını kodlarken hata yaptım ve ortaya çıkan yapı VS17 ile derlemeyi geçti. (Aşağıdaki koddaki üçüncü yapı)
Bu geçerli bir yapı mı? Bu işlevi nasıl adlandırırım?
template <class T> void tempfunc(T t)
{
cout << "Generic Template Version\n";
}
template <>
void tempfunc<int>(int i) {
cout << "Template Specialization Version\n";
}
template <int> void tempfunc(int i)
{
cout << "Coding Mistake Version\n";
}
Üçüncü yapıyı arayamadım.
Yanıtlar
Evet, bu geçerli bir yapı. Bu, türdeki tür olmayan bir şablon parametresine dayanan bir şablon aşırı yüklemesidir int.
Şöyle diyebilirsiniz:
tempfunc<42>(42);
Şablon sözdizimi olmayan çağrıların, bir tür parametresinde şablonlanmış sürümleri çağırmaya devam edeceğini unutmayın:
tempfunc(42); // calls specialization
tempfunc(true); // calls primary
İşte bir demo
template parametreler iki türdendir - tür parametreler ve tür olmayan parametreler.
Kullandığınızda
template <class T> void tempfunc(T t) { ... }
templateParametre bir tür parametresidir. Böyle bir şablonu kullanmak için, türün çıkarsanması veya açıkça belirtilmesi gerekir.
Kullandığınızda
template <int> void tempfunc(int i) { ... }
templateparametresi olmayan bir tipi bir parametredir. Bildiğim kadarıyla, tür olmayan bir parametrenin değeri çıkarılamaz. Açıkça sağlanmalıdır.
Sonuncusu template, tip olmayan bir parametre kullanır. Çağrılabileceği değerin tipinde olması gerekir int. Örnek çağrılar:
tempfunc<0>(20);
tempfunc<999>(34);