0Pricing
C++ Academy · Lektion

Variadische Templates und Parameter-Packs

Verwenden Sie Parameter-Packs und Fold-Ausdrücke, um variadische Templates zu schreiben.

Variadische Templates und Parameter-Packs ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.

Variable Anzahl von Templateargumenten

Variadische Templates akzeptieren eine beliebige Anzahl von Templateargumenten. Sie werden verwendet, um Funktionen wie std::make_unique, std::tuple und printf-style-Logging zu schreiben.

Syntax von Parameter-Packs

Verwenden Sie typename... Ts, um einen Typparameter-Pack zu deklarieren, und Ts..., um ihn zu expandieren.

template <typename... Args>
void print_all(Args... args) {
    // ...
}

Pack-Expansion

Die ...-Auslassung hinter einem Ausdruck expandiert den Pack zu einer kommagetrennten Liste.

template <typename... Args>
void pass_through(Args... args) {
    other_func(args...);    // pass each arg
}

Rekursive variadische Templates (alter Stil)

Vor C++17 wurden variadische Funktionen typischerweise rekursiv geschrieben – ein Argument verarbeiten und anschließend mit den übrigen rekursiv fortfahren.

// base case
void log() {}

// recursive case
template <typename T, typename... Rest>
void log(T first, Rest... rest) {
    std::cout << first;
    log(rest...);
}

Fold-Ausdrücke (C++17)

C++17 führte Fold-Ausdrücke ein – deutlich übersichtlicher als Rekursion. Wenden Sie einen Operator auf einen Pack an.

template <typename... Args>
auto sum(Args... args) {
    return (args + ...);    // fold +
}

std::cout << sum(1, 2, 3, 4);   // 10

Fold-Operatoren

Vier Fold-Formen:

  • (... op pack) – linker Fold über eine unäre Expansion
  • (pack op ...) – rechter Fold
  • (init op ... op pack) – linker Fold mit Initialwert
  • (pack op ... op init) – rechter Fold mit Initialwert

Alle Argumente ausgeben

Ein gängiges Idiom mit einem Komma-Fold.

template <typename... Args>
void print_all(Args... args) {
    ((std::cout << args << " "), ...);   // comma fold
}

print_all(1, "hi", 3.14);   // 1 hi 3.14

Argumente zählen

sizeof...(pack) gibt zur Compile-Zeit die Anzahl der Elemente in einem Pack zurück.

template <typename... Args>
void info(Args... args) {
    std::cout << "count = " << sizeof...(args);
}

Variadische Klassentemplates

Auch Klassentemplates können Parameter-Packs enthalten. Beispiel: std::tuple<Ts...>.

template <typename... Ts>
class Tuple {
    // implementation uses recursion or storage tricks
};

Perfect Forwarding mit Packs

Kombinieren Sie variadische Templates mit std::forward, um beliebige Argumente perfekt an einen Konstruktor weiterzuleiten.

template <typename T, typename... Args>
std::unique_ptr<T> my_make_unique(Args&&... args) {
    return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
}

Manipulation von Typ-Packs

Mit Template-Spezialisierungen oder Fold-Ausdrücken können Sie Listenoperationen zur Compile-Zeit implementieren: erstes Element, letztes Element sowie die Zerlegung in Kopf und Rest.

Fallstricke

Häufige Probleme:

  • Den Pack nicht zu expandieren (args statt args...)
  • Auswertungsreihenfolge in Fold-Ausdrücken (bei nichtassoziativen Operatoren ist links oder rechts entscheidend)
  • Verlängerte Kompilierzeit durch tiefe Rekursion

Schnelltest

Welche C++17-Funktion vereinfacht das Addieren aller Elemente eines Parameter-Packs?

Zusammenfassung

Variadische Templates verarbeiten über Parameter-Packs eine variable Anzahl von Templateargumenten. C++17-Fold-Ausdrücke ersetzen rekursiven variadischen Code durch kompakte Ausdrücke. Zusammen mit Perfect Forwarding bilden sie die Grundlage für Factory-Funktionen und generisches Dispatching.

Häufig gestellte Fragen

Ist die Lektion „Variadische Templates und Parameter-Packs“ kostenlos?

Ja — der vollständige Text von „Variadische Templates und Parameter-Packs“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Variadische Templates und Parameter-Packs“?

Verwenden Sie Parameter-Packs und Fold-Ausdrücke, um variadische Templates zu schreiben. Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C++ Academy zu starten?

Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Variadische Templates und Parameter-Packs“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?

Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Funktions- und Klassentemplates aufgefrischt
  2. Templatespezialisierung: partiell und vollständig
  3. Variadische Templates und Parameter-Packs
  4. constexpr-Funktionen und if constexpr
← Zurück zu C++ Academy