Loading AI tools
Vikipedi'den, özgür ansiklopediden
Ş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.
TMP sabit değerlerin hesaplamak ve basit şablon meta işlevler yazmak için kullanılabilir.
constexpr double pi = 3.1415;
constexpr double pi_square = pi * pi;
sabit değer hesaplayan bir metaprogramdır.
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;
}
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.