Template'in kelimesinin anlamı şablon ve C++'daki function template olarak kullanım şekli de fonksiyonların şablon olarak yazılmasına olanak sağlamasıdır. Bu sayede yazılan fonksiyonun farklı parametre türlerine uygun olarak derleyici tarafından istenen biçimlerde yazılmasına olanak sağlamasıdır. Bu sayede C'de olduğu gibi bir fonksiyonu farklı farklı tipler için ayrı ayrı yazmak yerine, tek bir fonksiyon şablonu yazıp bunu farklı farklı tipler için kullanım esnekliği sağlamaktadır.
template <typename T>
return-type func-name(parameter list) {
// body of function
}
Template yazarken tip oluşturmak için typename veya class anahtar kelimesi kullanılabilir. İkisi de aynı anlama gelmektedir. Ama class kelimesinin kullanılması yanlış anlamlara çıkabileceğinden dolayı typename kelimesini kullanmak daha doğru olacaktır.
Function Template Örneği |
C++11 ile gelen Variadic Function Template örneği ise aşağıdaki gibidir. Temelde şablon fonksiyonların parametreleri sabit ama veri tipleri değişkendir. Fakat variadic versiyonunda ise parametre sayısı da değişken biçimdedir. Bu konu şimdilik bir örnekle açıklansa da daha sonra başlı başına bir yazının konusu olacaktır.
Variadic Function Template Örneği |
Eğer kodun içinde <int&> kısmını kaldırırsak aşağıdaki gibi bir hatayla karşılaşırız. Bunun nedeni type deduction yaparken compiler ilk parametreye bakarak T türünün int olduğunu düşünmekte fakat ikinci parametreye baktığında ise T türünün int& olduğuna karar vermekte ve hata mesajıyla karşılaşılmaktadır. Bu nedenle compiler'a T türünü doğrudan söyleyerek problemi aşabiliriz.
Yazdığımız template için compiler'ın deduction yapmadan doğrudan kendimiz türünü bildirmek için de yukarıdaki örneğe benzer şekilde fonksiyonun yanına <int,double, ...> biçiminde belirtebiliriz.
Note:
- Template fonksiyonumuzdaki parametreleri ve geri dönüş tipini referans yapmak daha iyi performans sağlanmasına yardımcı olacaktır.