struct defer_dummy {} ؛
قالب
بناء الجملة كما يلي:
#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
تأجيل {
// الرمز المراد تنفيذه في نهاية النطاق الحالي
} ؛ مثال:
في المثال التالي ، يتم استخدام الماكرو المؤجل ضمن دالة read_entire_file لإغلاق ملف الإدخال تلقائيًا عند خروج الوظيفة:
#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
#تضمين الفوائد:
#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
موجزة بشكل تجاري: تم تصميم بناء الجملة ليكون من السهل القراءة والاستخدام. ترجمة أوقات الترجمة. &&&]
يبدأ اسم كائن التوجيه المحلي بـ ZZ_ بدلاً من _ لتجنب تلوث مساحة الاسم.تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3