Şablon meta programlama
Bu maddede kaynak listesi bulunmasına karşın metin içi kaynakların yetersizliği nedeniyle bazı bilgilerin hangi kaynaktan alındığı belirsizdir. (Bu şablonun nasıl ve ne zaman kaldırılması gerektiğini öğrenin) |
TMP “Şablon Meta Programlama”nın İngilizce çevirisinin kısaltmasıdır. 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
TMP türler hakkında meta bilgi tutmak için kullanılabilir. Örneğin,
template <class T>
class meta_bilgi
{
static const bool tam_sayı_mı=false;
}
özelleşmemiş bir şablon tanımlar.
Bu şablonun
int
için özelleşmiş şekli
class meta_bilgi<int>
{
static const bool tam_sayı_mı=true;
}
programcı tarafından
int
türü için derleme öncesinden bilgi almak için kullanılabilir.
Meta işlevler
TMP sabit değerlerin hesaplamak ve basit şablon meta işlevler yazmak için kullanılabilir.
Değer hesaplama
Ö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
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.
template <int x, int y>
class GCD
{
public:
enum{
RET = GCD<y,x%y>::RET
};
};
template<int x>
class GCD<x,0>
{
public:
enum {
RET = x
};
};
int main()
{
int x [GCD<1001,156>::RET ];
std::cout << sizeof(x) << std::endl;
return 0;
}