benutzerdefinierte Implementierung einer "Defer" -Funktion in c
In C beinhaltet das Konzept von "Defer" die Ausführung spezifischer Aktionen am Ende durchzuführen eines bestimmten Umfangs oder eines bestimmten Codeblocks. Während die STL (Standard-Vorlagenbibliothek) und die Boost-Bibliotheken keine integrierte Implementierung dieser Funktion bereitstellen, kann eine benutzerdefinierte Lösung mit dem folgenden Code-Snippet erstellt werden:
#ifndef defer
struct defer_dummy {};
template struct deferrer { F f; ~deferrer() { f(); } };
template deferrer operator*(defer_dummy, F f) { return {f}; }
#define DEFER_(LINE) zz_defer##LINE
#define DEFER(LINE) DEFER_(LINE)
#define defer auto DEFER(__LINE__) = defer_dummy{} *[&]()
#endif // defer
())
#endif // defer useage:
Das Auflaufmakro kann in einem bestimmten Bereich verwendet werden, um einen Codeblock zu definieren, der ausgeführt wird, wenn dieses Zielfernrohr endet. Die Syntax lautet wie folgt:
defer {
// Code to be executed at the end of the current scope
};
Defer {
// Code, der am Ende des aktuellen Bereichs ausgeführt werden soll
}; Beispiel:
Im folgenden Beispiel wird das Defer -Makro in der Funktion read_entire_file verwendet, um die Eingabedatei automatisch zu schließen, wenn die Funktion beendet:
defer {
// Code to be executed at the end of the current scope
};
#include Vorteile:
Hinweis:
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3