Heim > Artikel > Backend-Entwicklung > Wie kann ich eine Verzögerung im Golang-Stil in C erreichen?
Golang-Style Defer in C verstehen
Einführung:
In C das Konzept Die verzögerte Ausführung bietet, ähnlich wie Golangs Defer, eine bequeme Möglichkeit, Code auszuführen, nachdem eine bestimmte Funktion oder zurückgegeben hat Exits.
STL- und Bibliotheksimplementierungen:
Ab C 14 und höher bieten die Standard Template Library (STL) oder andere Bibliotheken wie Boost keine direkte Implementierung des verzögerten Ausführungsmusters. Es stehen jedoch mehrere Bibliotheken und Techniken von Drittanbietern zur Verfügung, um diese Funktionalität zu erreichen.
Benutzerdefinierte Implementierung:
Das bereitgestellte Code-Snippet bietet eine einfach zu bedienende Lösung ohne Overhead. zu verwendende Implementierung von defer:
<code class="cpp">#ifndef defer struct defer_dummy {}; template <class F> struct deferrer { F f; ~deferrer() { f(); } }; template <class F> deferrer<F> 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</code>
Verwendung:
Um diese Implementierung zu verwenden, platzieren Sie defer einfach vor dem Codebereich, den Sie ausführen möchten, nachdem die Funktion beendet wurde:
<code class="cpp">defer { // Code to be executed after the function returns };</code>
Beispiel:
Das folgende Beispiel zeigt, wie man dies verwendet Implementierung zum Öffnen und Lesen einer Datei verzögern und die Datei automatisch schließen, wenn der Bereich beendet wird:
<code class="cpp">#include <cstdint> #include <cstdio> #include <cstdlib> bool read_entire_file(char *filename, std::uint8_t *&data_out, std::size_t *size_out = nullptr) { ... defer { std::fclose(file); }; // Automatically close the file ... }</code>
Vorteile:
Diese Implementierung bietet mehrere Vorteile gegenüber anderen Ansätzen:
Fazit:
Diese benutzerdefinierte Defer-Implementierung bietet eine bequeme und effiziente Möglichkeit, eine verzögerte Ausführung in C zu erreichen, und stellt eine ähnliche Funktionalität wie das Schlüsselwort defer von Golang bereit, ohne dass dies erforderlich ist für benutzerdefinierte Klassen oder zusätzliche Abhängigkeiten.
Das obige ist der detaillierte Inhalt vonWie kann ich eine Verzögerung im Golang-Stil in C erreichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!