CodeBlanks Logo Icon CodeBlanks

Parameter pack

Parameter pack ve açma (expansion) öğrenirsin.

Parameter pack

Parameter pack, sıfır veya daha fazla değeri tek bir isimle tutan yapıdır. Tür pack'i typename... Args, değer pack'i Args... args biçiminde yazılır. Pack, derleme zamanında açılır; her öğe için ayrı kod üretilir.

Örnek: template <typename... Args> void f(Args... args) herhangi sayıda bağımsız değişken alır. f(1, 2.0, 'x') çağrısı Args = {int, double, char} ve args = {1, 2.0, 'x'} oluşturur. Pack, fonksiyon gövdesinde açılarak işlenir.

Pack'in açılımı

Bir pack fonksiyon gövdesinde kullanıldığında otomatik olarak açılır. sizeof...(args) pack'teki değer sayısını verir. Pack'i tek tek işlemek için fold expression veya özyinelemeli (recursive) şablon kullanılır.

Özyinelemeli yaklaşım: bir fonksiyon ilk bağımsız değişkeni alır, kalan pack'i tekrar kendine geçirir. Boş pack için bir aşırı yükleme (overload) taban durum olur. Bu klasik yöntem C++17'den önce yaygındı; fold expression ile artık daha kısa yazılır.

Uygulama count_args fonksiyonu

template <typename... Args> int count_args(Args... args) yaz. Gövdede return sizeof...(Args); olsun. main içinde count_args(1, 2.0, "x") çağır ve sonucu std::cout ile yazdır.

Başlangıç kodu

main.cpp
#include <iostream>

// count_args şablonunu yaz

int main() {
    // count_args(1, 2.0, "x") çağır ve yazdır
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>

template <typename... Args>
int count_args(Args... args) {
    return sizeof...(Args);
}

int main() {
    std::cout << count_args(1, 2.0, "x");
    return 0;
}

Beklenen çıktı

3

Soru ve cevaplar

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

1 Değer pack'i tamamla

Soru
template <typename... Args>
void f(____) { }
Cevap
template <typename... Args>
void f(Args... args) { }

Açıklama: Args... args, değer pack'i belirtir.

2 sizeof...(args) ne döndürür?

main.cpp
template <typename... Args>
void f(Args... args) { return sizeof...(args); }
  • Pack'teki değer sayısını Doğru cevap
  • Pack'in ilk türünü
  • Tür sayısını değil, byte sayısını
  • İlk değerin adresini

Açıklama: sizeof...(args) pack'teki değer sayısını verir.

3 İfadeyi amacına eşle

Kavram Anlamı
typename... Args Tür pack tanımı
Args... args Değer pack tanımı
sizeof...(args) Değer sayısı
sizeof...(Args) Tür sayısı

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