C의 Golang 스타일 연기 이해
소개:
C의 개념 Golang의 defer와 유사한 지연 실행 기능은 특정 함수가 반환되거나 종료된 후 코드를 실행하는 편리한 방법을 제공합니다.
STL 및 라이브러리 구현:
C 기준 14 이상에서는 STL(표준 템플릿 라이브러리) 또는 Boost와 같은 기타 라이브러리가 지연 실행 패턴의 직접적인 구현을 제공하지 않습니다. 그러나 이 기능을 구현하는 데 사용할 수 있는 여러 타사 라이브러리와 기술이 있습니다.
맞춤 구현:
제공된 코드 조각은 오버헤드가 없고 손쉬운 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>
사용법:
이 구현을 사용하려면 함수 다음에 실행하려는 코드 범위 앞에 defer를 배치하면 됩니다. 종료:
<code class="cpp">defer { // Code to be executed after the function returns };</code>
예:
다음 예에서는 이 연기 구현을 사용하여 파일을 열고 읽는 방법을 보여 주며, 범위가 종료되면 자동으로 파일을 닫습니다. :
<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>
장점:
이 구현은 다른 접근 방식에 비해 여러 가지 장점을 제공합니다.
결론:
이 사용자 정의 defer 구현은 사용자 정의 클래스나 추가 종속성이 필요 없이 Golang의 defer 키워드와 유사한 기능을 제공하여 C에서 지연 실행을 달성하는 편리하고 효율적인 방법을 제공합니다.
위 내용은 C에서 Golang 스타일 연기를 어떻게 달성할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!