Şablon meta programlama

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 bilgilerDüzenle

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şlevlerDüzenle

TMP sabit değerlerin hesaplamak ve basit şablon meta işlevler yazmak için kullanılabilir.

Değer hesaplamaDüzenle

Örneğin,

const double PI=3.1415;
const double PI_KARE = PI * PI;

sabit değer hesaplayan bir meta programdır.

Basit meta işlevlerDüzenle

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;
    }

Dış bağlantılarDüzenle

  • David Abrahams & Aleksey Gurtovoy (2004), C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond (1 bas.), Addison-Wesley Professional, ISBN 0321227255