CodeBlanks Logo Icon CodeBlanks

Variadic template

Variadic template ile değişken sayıda tür öğrenirsin.

Variadic template

Variadic template, sıfır veya daha fazla tür parametresi alan şablondur. Sözdizimi: template <typename... Args>. Üç nokta (...) parameter pack belirtir ve Args adlı paketin herhangi sayıda tür içermesini sağlar.

Bu, std::make_shared, std::tuple ve std::function gibi standart kütüphane araçlarının temelidir. Tek bir şablon, hem foo() hem foo(int, double, std::string) çağrılarını karşılar. Pack, derleme zamanında açılır; çalışma zamanı maliyeti yoktur.

Pack boyutu

Bir parameter pack'ın kaç öğe içerdiğini öğrenmek için sizeof...(Args) kullanılır. Sonuç derleme zamanı sabitidir. Örnek: sizeof...(Args), Args = {int, double, char} için 3 döndürür.

Bu bilgi, derleme zamanında dallar oluşturmak için kullanılabilir. Örneğin, pack boşsa sizeof...(Args) == 0 koşulu ile farklı kod çalıştırılır. Pack'in boyutu, şablonun çağrıldığı tür listesine göre belirlenir; kullanıcı bunu elle saymaz.

Uygulama Count şablonunu yaz

template <typename... Args> struct Count yaz. İçinde static const int value = sizeof...(Args); olsun. main içinde std::cout << Count<int, double, char>::value; yaz.

Başlangıç kodu

main.cpp
#include <iostream>

// Count şablonunu yaz: typename... Args alır

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

Örnek çözüm

main.cpp
#include <iostream>

template <typename... Args>
struct Count {
    static const int value = sizeof...(Args);
};

int main() {
    std::cout << Count<int, double, char>::value;
    return 0;
}

Beklenen çıktı

3

Soru ve cevaplar

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

1 Hangi satır variadic template?

  • template <int N>
  • template <typename T>
  • template <typename... Args> Doğru cevap
  • template <>

Açıklama: typename... Args, sıfır veya daha fazla tür alır.

2 Pack boyutunu tamamla

Soru
template <typename... Args>
struct Count {
    static const int value = ____;
};
Cevap
template <typename... Args>
struct Count {
    static const int value = sizeof...(Args);
};

Açıklama: sizeof...(Args) pack boyutunu verir.

3 Parçayı rolüne eşle

Kavram Anlamı
typename... Args Tür parameter pack
sizeof...(Args) Pack boyutu
template <typename... Args> Variadic şablon
Args... args Değer parameter pack

İleri seviye bölümündeki tüm dersler