Şablon meta programlama

(Şablon Meta Programlama sayfasından yönlendirildi)

“Şablon Meta Programlama" (İng. Template Meta Programming, TMP), C++ Meta programlama kendini veya başka programları değiştiren veya yaratan programlar yazmaktır. Şablon meta programlar derleyici tarafından derleme zamanında çalıştırılan programlardır.

Meta bilgiler değiştir

TMP türler hakkında meta bilgi tutmak için kullanılabilir. Örneğin,

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 işlevler 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

Örneğin,

const double PI = 3.1415;
const double PI_KARE = PI * PI;

sabit değer hesaplayan bir meta programdır.

Basit meta işlevler değiştir

Meta işlevler derleme zamanında basit işlemler yapmak için kullanılabilir. Örneğin 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

  • 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)