Şablon meta programlama
Bu madde hiçbir kaynak içermemektedir. (Nisan 2023) (Bu şablonun nasıl ve ne zaman kaldırılması gerektiğini öğrenin) |
“Ş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)