Variadic template
- C++ kursu
- İleri seviye
- Ders 7/83
- 5 dk
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
#include <iostream>
// Count şablonunu yaz: typename... Args alır
int main() {
// Sonucu yazdır
return 0;
}Örnek çözüm
#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
template <typename... Args>
struct Count {
static const int value = ____;
};
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 |