CodeBlanks Logo Icon CodeBlanks

Özet - Variadic template'ler

fold expressions ve perfect forwarding'i birleştirerek bir print fonksiyonu yazarsın.

Özet - Variadic template'ler

Bu grupta variadic template'lerin beş aracını gördün: typename... Args ile tür pack, Args... args ile değer pack, sizeof... ile pack boyutu, (args + ...) ile fold expression ve std::tuple ile heterojen paketleme. Perfect forwarding, bu araçları sarıcı (wrapper) fonksiyonlarda birleştirir.

Bu araçlar birlikte std::make_unique, std::emplace_back gibi modern API'lerin temelini oluşturur. Şimdi öğrendiklerini birleştiren küçük bir görev yazacaksın.

Uygulama Tuple + fold ile özet

template <typename... Args> auto sum_all(Args... args) yaz; gövdede return (args + ...); olsun. main içinde auto t = std::make_tuple(1, 2, 3); yap, sonra sum_all(std::get<0>(t), std::get<1>(t), std::get<2>(t)) çağır ve sonucu std::cout ile yazdır.

Başlangıç kodu

main.cpp
#include <iostream>
#include <tuple>

// sum_all şablonunu fold ile yaz

int main() {
    // Tuple oluştur, sum_all çağır ve yazdır
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>
#include <tuple>

template <typename... Args>
auto sum_all(Args... args) {
    return (args + ...);
}

int main() {
    auto t = std::make_tuple(1, 2, 3);
    std::cout << sum_all(std::get<0>(t), std::get<1>(t), std::get<2>(t));
    return 0;
}

Beklenen çıktı

6

Soru ve cevaplar

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

1 Hangi araç pack'i tek işleçle özetler?

  • sizeof...
  • std::forward
  • std::tuple
  • fold expression Doğru cevap

Açıklama: fold expression (args + ...) pack'i tek işleçle özetler.

2 Aracı amacına eşle

Kavram Anlamı
typename... Args Tür pack tanımı
sizeof...(Args) Pack boyutu
(args + ...) Fold özeti
std::tuple<T1, T2> Heterojen paket

3 Fold satırını tamamla

Soru
template <typename... Args>
auto sum_all(Args... args) {
    return (args + ____);
}
Cevap
template <typename... Args>
auto sum_all(Args... args) {
    return (args + ...);
}

Açıklama: (args + ...) sağ fold'tür.

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