सी में कार्यान्वयन को स्थगित करें
गो-स्टाइल डिफर की अवधारणा, जो स्वच्छ और संक्षिप्त संसाधन सफाई की अनुमति देती है, ने सी में लोकप्रियता हासिल की है . हालाँकि, इस सुविधा के लिए एक मानक या अच्छी तरह से समर्थित लाइब्रेरी कार्यान्वयन खोजना चुनौतीपूर्ण हो सकता है।
मानक टेम्पलेट लाइब्रेरी (एसटीएल) या बूस्ट में डिफर के लिए अंतर्निहित समर्थन की अनुपस्थिति के बावजूद, बाहरी कार्यान्वयन उपलब्ध हैं . ऐसा ही एक कार्यान्वयन एक हल्का, शून्य-ओवरहेड समाधान है:
#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
इस कार्यान्वयन के लिए न्यूनतम सेटअप की आवश्यकता होती है और इसे आसानी से आपके कोडबेस में एकीकृत किया जा सकता है। वाक्यविन्यास सीधा है:
defer { statements; };
उदाहरण के लिए, निम्नलिखित कोड स्निपेट में, जब read_entire_file फ़ंक्शन का दायरा बाहर निकल जाता है तो fclose ऑपरेशन स्वचालित रूप से निष्पादित होता है:
auto file = std::fopen(filename, "rb");
if (!file)
return false;
defer { std::fclose(file); }; // don't need to write an RAII file wrapper.
// ...
यह शून्य-ओवरहेड कार्यान्वयन सी में संसाधन सफाई को प्रबंधित करने का एक सुविधाजनक और कुशल तरीका प्रदान करता है, जो जटिल आरएआईआई कक्षाओं या कस्टम मेमोरी प्रबंधन तकनीकों की आवश्यकता के बिना गो-जैसी डिफर सुविधा प्रदान करता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3