Heim > Backend-Entwicklung > C++ > Hauptteil

Wie rufe ich Funktionen für variadische Vorlagenargumente in C auf?

Patricia Arquette
Freigeben: 2024-11-24 16:31:14
Original
291 Leute haben es durchsucht

How to Call Functions on Variadic Template Arguments in C  ?

Funktionen für variadische Vorlagenargumente aufrufen

Das Ziel besteht darin, eine print()-Funktion zu implementieren, die eine variable Anzahl von Argumenten annimmt und eine ausführt beliebige Funktion für jedes Argument. Dies ist als kompakte Alternative zur rekursiven Implementierung mit separaten Spezialisierungen für jeden Argumenttyp erwünscht.

C 17-Lösung

In C 17 kann dies mit a erreicht werden Faltausdruck:

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

Dieser Ausdruck erweitert die Argumente in args und ruft für jedes einzelne f() auf. Wenn f() ein Objekt mit einem überladenen Kommaoperator zurückgibt, verwenden Sie:

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

Lösung vor C 17

Für Versionen von C vor C 17: Ein gängiger Ansatz besteht darin, einen Listeninitialisierer zu verwenden, um die Argumente zu erweitern:

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

print() gibt jedoch void zurück, um eine Kompilierung zu vermeiden Fehler, der Code kann wie unten gezeigt geändert werden:

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

Dies funktioniert für verschiedene Argumente, es sind jedoch einige Einschränkungen zu beachten. Um dieses Muster wiederverwendbar zu machen, kann ein Makro erstellt werden:

#define SO_EXPAND_SIDE_EFFECTS(PATTERN) ::so::expand_type{ 0, ((PATTERN), 0)... }
Nach dem Login kopieren

Um jedoch mögliche Probleme mit überladenen Kommaoperatoren zu verhindern, kann das Makro wie folgt aktualisiert werden:

#define SO_EXPAND_SIDE_EFFECTS(PATTERN) ::so::expand_type{ 0, ((PATTERN), void(), 0)... }
Nach dem Login kopieren

Pre -C 17-Lösungen erfordern möglicherweise auch zusätzliche Überlegungen, um unnötige Speicherzuweisung zu vermeiden.

Das obige ist der detaillierte Inhalt vonWie rufe ich Funktionen für variadische Vorlagenargumente in C 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage