C에서 "Defer" 기능의 사용자 정의 구현
C에서 "defer" 개념은 마지막에 특정 작업을 실행하는 것을 포함합니다. 특정 범위 또는 코드 블록의 STL(표준 템플릿 라이브러리) 및 Boost 라이브러리는 이 기능의 내장 구현을 제공하지 않지만 다음 코드 조각을 사용하여 사용자 정의 솔루션을 생성할 수 있습니다:
<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>
사용법:
defer 매크로는 특정 범위 내에서 해당 범위가 끝날 때 실행될 코드 블록을 정의하는 데 사용할 수 있습니다. 구문은 다음과 같습니다.
<code class="cpp">defer { // Code to be executed at the end of the current scope };</code>
예:
다음 예에서는 defer 매크로가 read_entire_file 함수 내에서 다음과 같은 경우 입력 파일을 자동으로 닫는 데 사용됩니다. 함수 종료:
<code class="cpp">#include <cstdlib> #include <cstdio> bool read_entire_file(char *filename, std::uint8_t *&data_out, std::size_t *size_out = nullptr) { if (!filename) return false; auto file = std::fopen(filename, "rb"); if (!file) return false; defer { std::fclose(file); }; // don't need to write an RAII file wrapper. // ... Remaining code }</code>
이점:
참고:
위 내용은 STL이나 Boost 라이브러리에 의존하지 않고 C에서 \'지연\' 기능을 어떻게 구현할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!