Heim > Backend-Entwicklung > C++ > Hauptteil

Wie ruft man in C eine Funktion für verschiedene Vorlagenargumente auf?

DDD
Freigeben: 2024-11-10 22:02:03
Original
156 Leute haben es durchsucht

How do you call a function on a variadic template arguments in C  ?

Aufrufen einer Funktion für variadische Vorlagenargumente

In C möchte man möglicherweise eine Funktion entwerfen, die nahtlos mit einer beliebigen Anzahl von Argumenten arbeiten kann Argumente verschiedener Art. Die rekursive Vorlagenspezialisierung ermöglicht zwar eine solche Funktionalität, erzeugt jedoch eine beträchtliche Menge an redundantem Code. Um dieses Problem anzugehen, wird nach einem effizienteren Ansatz gesucht.

C 17 Fold Expression Solution

In C 17 wird eine einfache Lösung durch den Fold Expression bereitgestellt:

(f(args), ...);
Nach dem Login kopieren

Dieser Ausdruck ermöglicht den sequentiellen Aufruf von f für jedes Argument im args variadic Pack. Wenn f jedoch ein Objekt mit einem überladenen Kommaoperator zurückgibt, sollte die folgende Syntax verwendet werden:

((void)f(args), ...);
Nach dem Login kopieren

Lösung vor C 17

Vor C 17 , ein typischer Ansatz bestand darin, einen Listeninitialisierer mit einem absichtlich nicht leeren Rückgabetyp zu verwenden:

{ print(Args)... }
Nach dem Login kopieren

Dies erfordert jedoch einen Wrapping der Ausdruck in einer nicht verwendeten Variablen, um Kompilierungsfehler aufgrund des void-Rückgabetyps des Drucks zu verhindern:

using expand_type = int[];
expand_type{ (print(Args), 0)... };
Nach dem Login kopieren

Um die Wiederverwendbarkeit dieses Musters zu verbessern, kann ein Makro definiert werden:

#define SO_EXPAND_SIDE_EFFECTS(PATTERN) ::so::expand_type{ 0, ((PATTERN), 0)... }

SO_EXPAND_SIDE_EFFECTS(print(Args));
Nach dem Login kopieren

Um die potenzielle Zuweisung großer Arrays zu verringern, kann eine benutzerdefinierte Struktur verwendet werden:

namespace so {
    struct expand_type {
        template <typename... T>
        expand_type(T&amp;&amp;...) {}
    };
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie ruft man in C eine Funktion für verschiedene Vorlagenargumente auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage