Özet - Variadic template'ler
- C++ kursu
- İleri seviye
- Ders 12/83
- 5 dk
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
#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
#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
template <typename... Args>
auto sum_all(Args... args) {
return (args + ____);
}
template <typename... Args>
auto sum_all(Args... args) {
return (args + ...);
}
Açıklama: (args + ...) sağ fold'tür.