C++ Template

C++ programlama dili içerisinde yer alan sınıf ve fonksiyon şablonları olarak adlandırılan template özelliği ile ilgili bilgiler yer alıyor.

C++ template

C++ içerisinde yer alan template özelliği benzer işlemleri yapan fonksiyon ve sınıflar için ortak yapı kurulmasında kullanılır.

Geliştirilen uygulamalarda farklı veri türüne sahip ancak benzer işlemleri yapan fonksiyonlar geliştirilen uygulamanın karmaşık olmasına ve kod tekrarına neden olur.

#include <iostream>

using namespace std;

int topla(int deger1, int deger2) {
  return deger1 + deger2;
}

float topla(float deger1, float deger2) {
  return deger1 + deger2;
}

int main() {

  int sayi1 = 11, sayi2 = 22;
  cout << topla(sayi1, sayi2);

  cout << endl;

  float sayi3 = 30.7, sayi4 = 9.9;
  cout << topla(sayi3, sayi4);

  return 0;
}

Kod tekrarını azalmak için template özelliği kullanılabilir.

#include <iostream>

using namespace std;

template <class Tur>
Tur topla(Tur deger1, Tur deger2) {
  return deger1 + deger2;
}

int main() {

  int sayi1 = 11, sayi2 = 22;
  cout << topla(sayi1, sayi2);

  cout << endl;

  float sayi3 = 30.7, sayi4 = 9.9;
  cout << topla(sayi3, sayi4);

  cout << endl;

  double sayi5 = 77.5, sayi6 = 87.6;
  cout << topla(sayi5, sayi6);

  return 0;
}

C++ içerinde yer alan template özelliği NYP ile geliştirmede kullanılan class yapısında da kullanılabilir.

#include <iostream>

using namespace std;

template <class Tur>
class Sayi {
public:
  Tur deger1, deger2;
  Sayi(Tur d1, Tur d2) {
    this->deger1 = d1;
    (*this).deger2 = d2;
  }
  Tur topla();
};

template <class Tur>
Tur Sayi<Tur>::topla() {
    return this->deger1 + this->deger2;
};

int main() {

  Sayi<int> tamSayi(11, 22);
  Sayi<double> kesirliSayi(22.3, 43.1);

  cout << tamSayi.topla() << endl;

  cout << kesirliSayi.topla() << endl;

  return 0;
}

Bir veri türü için özel template (template specialization) hazırlanarak veri türüne özgü farklı işlemler yapılabilir.

#include <iostream>

using namespace std;

template <class Tur>
class Sinif {
public:
  Sinif() {
    cout << "Tip char degil" << endl;
  }
};

template <>
class Sinif <char> {
public:
  Sinif() {
    cout << "Tip char" << endl;
  }
};

int main() {

  Sinif<int> a;
  Sinif<float> b;
  Sinif<char> c;

  return 0;
}

Hazırlanan template için birden fazla farklı veri türü belirlenebilir.

#include <iostream>

using namespace std;

template <class Tur1, class Tur2>
Tur1 topla(Tur1 d1, Tur2 d2) {
  return d1 + d2;
}

int main(){

  int s1 = 7;
  double s2 = 2.75;
  cout << topla(s1, s2) << endl;
  cout << topla(s2, s1) << endl;

  return 0;
}

İyi hazırlanmış template yapısı oluşturmak kod tekrarını azaltırken hatalı ve eksik hazırlanmış template yapısı istenmeyen sonuçlar verecektir.

Programlama örneklerine buradan ulaşabilirsiniz…

Hayırlı günler dilerim.

Yusuf SEZER

Yusuf SEZER

Computer Engineer who interested about web technologies, algorithms, artificial intelligence and embedded systems; constantly exploring new technologies.


Bunlara'da bakmalısın!