CodeBlanks Logo Icon CodeBlanks

Type list

Type list ve derleme zamanı liste öğrenirsin.

Type list

Type list, derleme zamanında türleri saklayan bir veri yapısıdır. Değişken sayıda tür parametresi alan şablonla yazılır: template <typename... Ts> struct Typelist {};. Burada Ts bir tür paketidir (parameter pack).

Uzunluk, özyinelemeli bir yardımcı ile derleme zamanında hesaplanır. Boş liste uzunluğu 0, boş olmayan listenin uzunluğu 1 + Length<tail>::value. Böylece Typelist<int, double, char> için uzunluk 3 bulunur.

Length yardımcısı

Length, bir Typelist'in kaç tür içerdiğini döndürür. Genel uzmanlaşma listenin başını çıkarıp kalanı için Length'i çağırır: template <typename Head, typename... Tail> struct Length<Typelist<Head, Tail...>> { static const int value = 1 + Length<Typelist<Tail...>>::value; };.

Boş liste için template <> struct Length<Typelist<>> { static const int value = 0; };. Bu, recursive Factorial ile aynı yapıdadır; tek fark tür listesi üzerinde çalışır.

Uygulama Typelist ve Length yaz

template <typename... Ts> struct Typelist {}; tanımla. Genel Length uzmanlaşmasını 1 + Length<Typelist<Tail...>>::value ile yaz. Boş uzmanlaşmayı value = 0 ile ekle. main içinde std::cout << Length<Typelist<int, double, char>>::value; yaz.

Başlangıç kodu

main.cpp
#include <iostream>

// Typelist ve Length şablonlarını buraya tanımla

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

Örnek çözüm

main.cpp
#include <iostream>

template <typename... Ts>
struct Typelist {};

template <typename List>
struct Length;

template <typename Head, typename... Tail>
struct Length<Typelist<Head, Tail...>> {
    static const int value = 1 + Length<Typelist<Tail...>>::value;
};

template <>
struct Length<Typelist<>> {
    static const int value = 0;
};

int main() {
    std::cout << Length<Typelist<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 Parçayı rolüne eşle

Kavram Anlamı
typename... Ts Tür paketi
struct Typelist Liste yapısı
Length<Typelist<...>> Derleme zamanı uzunluk
Typelist<int, char> İki tür

2 Boş liste uzunluğu

Soru
template <> struct Length<Typelist<>> { static const int value = ____; };
Cevap
template <> struct Length<Typelist<>> { static const int value = 0; };

Açıklama: Boş listenin uzunluğu 0'dır.

3 Typelist<int, double, char> uzunluğu?

main.cpp
template <typename... Ts> struct Typelist {};
template <typename Head, typename... Tail> struct Length<Typelist<Head, Tail...>> { static const int value = 1 + Length<Typelist<Tail...>>::value; };
  • 1
  • 6
  • 0
  • 3 Doğru cevap

Açıklama: int, double ve char üç türdür; uzunluk 3.

Uzman bölümündeki tüm dersler