Ana sayfa > Programlama > C++ Programlama > Fonksiyon şablonları

Fonksiyon şablonları

► Detaylı anlatım

Bir fonksiyon şablonu, çeşitli veri türlerine uygulanacak genel bir işlem grubunu tanımlar. Fonksiyonun üzerinde çalışacağı veri türü fonksiyona bir parametre olarak aktarılır. Fonksiyon şablonu ile, geniş bir veri yelpazesine tek bir genel kod yapısı uygulanabilir. Farklı veri türlerine aynı kodlarla işlem yapılması gerektiğinde fonksiyon şablonlarını kullanılması büyük kolaylık sağlar.

Bir fonksiyon şablonu template ve typename anahtar kelimeleri ile oluşturulur. Fonksiyon şablonu bildirimi için kullanılan genel yapı aşağıda gösterilmektedir:

template <typename T> veri-türü fonk-adı(parametreler)
{
  // kod bloğu
}

Fonksiyon şablon bildiriminde typename yerine class anahtar kelimesi de kullanılabilir. Her iki anahtar kelime de aynı işlemi yapar.

Burada T ifadesi, fonksiyon tarafından kullanılan bir veri türü için bir yer tutucu adını gösterir. Bu isim, fonksiyon tanımında kullanılabilir. Ancak, derleyicinin fonksiyonun belirli bir sürümünü oluşturduğunda otomatik olarak gerçek veri türüyle değiştireceği bir yer tutucudur.

Tek parametre değeri alan şablon fonksiyonlar

Şablon fonksiyon bildiriminde typename T şeklinde yer alan her bir ifade fonksiyon parametrelerinde aynı anda kullanılabilecek bir veri türü için ayrılan bir yer olarak kabul edilebilir. Eğer tek bir tür tanımlaması yaparsak, fonksiyon parametrelerinde ve fonksiyon kod bloğu içinde, aynı anda sadece tek bir veri türü kullanılabilmektedir.

Kendisine geçirilen parametre değerinin karesini alan bir şablon fonksiyonunun kullanılmasını bir örnek üzerinde incelemeye çalışalım:


#include <iostream>

using namespace std;

// Şablon fonksiyon tanımlama
template <typename t> void kare_al(t x)
{
  cout << "Değerin karesi = " << x * x << endl;
}

int main(void)
{
  kare_al(21);      // int değerin karesi
  kare_al(115.84f); // float değerin karesi
  
  return 0;
}

Yukarıdaki programı derleyip çalıştırdığımızda, aşağıdaki ifadeleri ekrana yazar:

Değerin karesi = 441
Değerin karesi = 13418.9

Program, önce aynı veri türünden aldığı parametre değerinin karesini ekrana yazan kare_al() adlı bir şablon fonksiyonu tanımlar. Şablon fonksiyonunu önce int değer sonra float bir değer ile çağırarak, fonksiyona geçirilen değerlerin karesini ekrana yazar.

Program çalıştığında yapılan fonksiyon çağrılarının veri türü değişimine göre oluşturulan fonksiyon yapıları aşağıdaki şekilde gösterilmektedir.

Şablon fonksiyon tanımlamasındaki <typename t> ifadesi, aynı anda sadece tek bir veri türü ile işlem yapılabileceğini göstermektedir.

Çoklu parametre değeri alan şablon fonksiyonlar

Şablon fonksiyon bildiriminde typename T şeklinde tek bir ifade yer alıyorsa, aynı anda tek bir veri türü kullanılabileceğinden, fonksiyon parametrelerinin sayısı birden fazla olsa bile, her parametre için aynı anda sadece tek bir veri türü kullanılabilmektedir.

Aynı veri türünden iki parametre ile toplama işlemi yapan bir şablon fonksiyonunun kullanılmasını bir örnek üzerinde incelemeye çalışalım:


#include <iostream>

using namespace std;

// Şablon fonksiyon tanımlama
// Şablon fonksiyona geçirilen her iki parametre aynı veri türünden olmalıdır.
template <typename t> void topla(t x, t y)
{
  cout << "Değerlerin toplamı = " << x + y << endl;
}

int main(void)
{
  topla(21, 57);           // 2 adet int değer toplama işlemi
  topla(174.84f, 321.52f); // 2 adet float değer toplama işlemi

  return 0;
}

Yukarıdaki programı derleyip çalıştırdığımızda, aşağıdaki ifadeleri ekrana yazar:

Değerlerin toplamı = 78
Değerlerin toplamı = 496.36

Program, önce aynı veri türünden iki parametre alarak toplamını ekrana yazan topla() adlı bir şablon fonksiyonu tanımlar. Şablon fonksiyonunu önce iki adet int değer sonra iki adet float değer ile çağırarak, fonksiyona geçirilen değerlerin toplamını ekrana yazar.

Şablon fonksiyon tanımlamasındaki <typename t> ifadesi, birden fazla parametre kullanılsa bile, aynı anda sadece tek bir veri türü ile işlem yapılabileceğini göstermektedir.

Farklı veri türünde çoklu parametre değeri alan şablon fonksiyonlar

Şablon fonksiyon bildiriminde typename T şeklinde birden fazla ifade yer alıyorsa, aynı anda birden fazla veri türü kullanılabileceğinden, parametreler için aynı anda birden fazla veri türü kullanılabilmektedir. Fonksiyon tanımına eklenen her bir tür ifadesi aynı anda kullanılabilecek veri türü miktarını artırır.

Farklı veri türünden iki parametre ile toplama işlemi yapan bir şablon fonksiyonunun kullanılmasını bir örnek üzerinde incelemeye çalışalım:


#include <iostream>

using namespace std;

// Şablon fonksiyon tanımlama
// Şablon fonksiyona geçirilen parametreler aynı veya farklı veri türünden olabilir.
template <typename t1, typename t2> void topla(t1 x, t2 y)
{
  cout << "Değerlerin toplamı = " << x + y << endl;
}

int main(void)
{
  topla(36, 73);          // İki adet int değer toplama
  topla(14.48f, 648.34f); // İki adet float değer toplama
  topla(79, 321.52f);     // Birer adet int ve float değer toplama

  return 0;
}

Yukarıdaki programı derleyip çalıştırdığımızda, aşağıdaki ifadeleri ekrana yazar:

Değerlerin toplamı = 109
Değerlerin toplamı = 662.82
Değerlerin toplamı = 400.52

Program, önce aynı veya farklı veri türünden iki parametre alarak toplamını ekrana yazan topla() adlı bir şablon fonksiyonu tanımlar. Şablon fonksiyonunu sırasıyla iki adet int değer, iki adet float değer ve bir int ve bir float değer ile çağırarak, fonksiyona geçirilen değerlerin toplamını ekrana yazar.

Şablon fonksiyon tanımlamasındaki <typename t1, typename t2> ifadesi, aynı anda iki veri türü ile işlem yapılabileceğini göstermektedir.