İçeriğe atla

Şablon meta programlama

Vikipedi, özgür ansiklopedi

Şablon Metaprogramlama (İng. Template Metaprogramming, TMP), C++ programlama dilinde derleme zamanında hesaplama yapan programlar yazmaktır.

TMP türler hakkında meta bilgi almak için kullanılabilir:

template <class T>
struct meta_bilgi {
  static const bool tam_sayı_mı = false;
};

özelleşmemiş bir şablon tanımlar. Bu şablonun int türü için özelleşmiş şekli:

template <>
struct meta_bilgi<int> {
  static const bool tam_sayı_mı = true;
};

programcı tarafından

static_assert(meta_bilgi<int>::tam_sayı_mı == true);
static_assert(meta_bilgi<double>::tam_sayı_mı == false);

şeklinde derleme öncesinden bilgi almak için kullanılabilir.

Meta fonksiyonlar

[değiştir | kaynağı değiştir]

TMP sabit değerlerin hesaplamak ve basit şablon meta işlevler yazmak için kullanılabilir.

Değer hesaplama

[değiştir | kaynağı değiştir]
constexpr double pi = 3.1415;
constexpr double pi_square = pi * pi;

sabit değer hesaplayan bir metaprogramdır.

Basit meta işlevler

[değiştir | kaynağı değiştir]

Meta işlevler derleme zamanında basit işlemler yapmak için kullanılabilir. Aşağıdaki program iki sayının ortak bölenlerinin en büyüğünü (OBEB) derleme zamanında hesaplar:

#include <iostream>

template <int x, int y>
struct GCD {
  enum { RET = GCD<y, x % y>::RET };
};

template <int x>
struct GCD<x, 0> {
  enum { RET = x };
};

int main() {
  int x[GCD<1001, 156>::RET];
  std::cout << sizeof(x) << std::endl;
  return 0;
}

Dış bağlantılar

[değiştir | kaynağı değiştir]
  • David Abrahams & Aleksey Gurtovoy (2004), C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond (1 bas.), Addison-Wesley Professional, ISBN 0321227255 
  • Boost.Hana 15 Mart 2024 tarihinde Wayback Machine sitesinde arşivlendi. (İngilizce)