Template metaprogramming
- C++ kursu
- Uzman
- Ders 1/47
- 5 dk
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
#include <iostream>
// Double şablonunu buraya tanımla
int main() {
// Sonucu yazdır
return 0;
}Örnek çözüm
#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?
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
template <int N> struct Double { static const int value = N * ____; };
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ı |