Şablon meta programlama
Şablon Metaprogramlama (İng. Template Metaprogramming, TMP), C++ programlama dilinde derleme zamanında hesaplama yapan programlar yazmaktır.
Meta bilgiler
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
TMP sabit değerlerin hesaplamak ve basit şablon meta işlevler yazmak için kullanılabilir.
Değer hesaplama
constexpr double pi = 3.1415; constexpr double pi_square = pi * pi;
sabit değer hesaplayan bir metaprogramdır.
Basit meta işlevler
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
- 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)