Şablon meta programlama

Vikipedi, özgür ansiklopedi

“Ş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 | kaynağı 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 | 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]

Ö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 | kaynağı 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 | 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)