CodeBlanks Logo Icon CodeBlanks

Template metaprogramming

Template metaprogramming ile derleme zamanı hesap öğrenirsin.

Template metaprogramming

Template metaprogramming (TMP), hesaplamaları derleme zamanında yapan şablonlardır. Bir şablon, tür parametresi yerine tür olmayan parametre de alabilir: template <int N> struct Double { static const int value = N * 2; };. Burada N bir int değeridir ve derleme zamanında bilinir.

Sonuç, Double<5>::value biçiminde erişilen bir sabittir ve 10 olur. Bu değer çalıştırılabilir dosyaya hazır bir sayı olarak gömülür; çalışma zamanında hesap yapılmaz. TMP, derleme zamanı sabitleri üretmek için kullanılır.

::value ile erişim

Sonuca erişmek için şablon adını, açılı parantez içinde değeri ve ::value yazarsın. Örnek: Double<7>::value ifadesi 14 sonucunu verir. Çünkü derleyici Double<7> için value = 7 * 2 hesabını derleme zamanında yapar.

Bu sabitleri std::cout ile yazdırabilirsin: std::cout << Double<7>::value; ekrana 14 basar. Derleyici en iyileyici (optimizer) bu sabiti doğrudan sayıya dönüştürür.

Uygulama Double şablonunu tanımla

template <int N> struct Double tanımla; içinde static const int value = N * 2; olsun. main içinde std::cout << Double<7>::value; yaz.

Başlangıç kodu

main.cpp
#include <iostream>

// Double şablonunu buraya tanımla

int main() {
    // Sonucu yazdır
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>

template <int N>
struct Double {
    static const int value = N * 2;
};

int main() {
    std::cout << Double<7>::value;
    return 0;
}

Beklenen çıktı

14

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 template <int N> struct Double ne üretir?

main.cpp
template <int N> struct Double { static const int value = N * 2; };
  • Çalışma zamanı değişkeni
  • Derleme zamanı sabiti Doğru cevap
  • Bir fonksiyon
  • Bir makro

Açıklama: Double<5>::value derleme zamanında 10 olarak hesaplanır.

2 Çarpanı tamamla

Soru
template <int N> struct Double { static const int value = N * ____; };
Cevap
template <int N> struct Double { static const int value = N * 2; };

Açıklama: value = N * 2 yazılır; çift kat için çarpan 2'dir.

3 Parçayı rolüne eşle

Kavram Anlamı
template <int N> Tür olmayan parametre
static const int value Derleme zamanı sonuç
Double<5>::value Sabi erişimi
struct Double Şablon yapı

Uzman bölümündeki tüm dersler