Lambdas العامة وعمليات الإغلاق في C++14
اكتب Lambdas عامة بمعاملات auto، وفكّر في أنواع عمليات الإغلاق.
Lambdas العامة وعمليات الإغلاق في C++14 درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.
لامبدا عامة
تتيح C++14 كتابة auto في قائمة معاملات لامبدا. وينشئ المصرّف operator() قالبية، لذلك تقبل لامبدا أي نوع.
auto print = [](const auto& x) {
std::cout << x << "\n";
};
print(42);
print("hello");
print(3.14);آلية عملها
تتحول لامبدا إلى فئة تحتوي على operator() قالبية. ويُنشئ كل تركيب فريد من الأنواع دالة منفصلة عند إنشاء البرنامج، من وراء الكواليس.
حالات الاستخدام
تتألق لامبدا العامة في الخوارزميات التي تعمل مع أنواع متعددة.
std::vector<int> ints = {1, 2, 3};
std::vector<std::string> strs = {"a", "b"};
auto printAll = [](const auto& container) {
for (const auto& x : container) std::cout << x << " ";
};
printAll(ints);
printAll(strs);معاملات auto المتعددة
كل auto مستقل عن الآخر، لذلك يمكن أن تُستنتج معاملات مختلفة على أنها أنواع مختلفة.
auto add = [](auto a, auto b) {
return a + b;
};
std::cout << add(1, 2.5); // 3.5
std::cout << add(std::string("Hi"), "!"); // Hi!الإغلاقات كائنات
ينشئ كل تعبير لامبدا إغلاقًا، وهو مثيل لفئة فريدة ينشئها المصرّف. ويخزّن الإغلاق أي متغيرات ملتقطة كأعضاء.
نوع فريد لكل لامبدا
لكل تعبير لامبدا نوع فريد، حتى لو كان تعبيران متطابقين في النص. ولا يمكن كتابة اسم النوع مباشرة؛ استخدموا auto أو std::function.
تخزين لامبدا في std::function
للاحتفاظ بلامبدا في متغير نوعه معروف، غلّفوها داخل std::function. يضيف ذلك تكلفة بسيطة، لكنه يتيح تعدد الأشكال وقت التشغيل للكائنات القابلة للاستدعاء.
#include <functional>
std::function<int(int)> doubler = [](int x) { return x * 2; };تكلفة محو النوع
تستخدم std::function محو النوع؛ إذ يمكنها تخزين أي كائن قابل للاستدعاء ومتوافق، لكنها تضيف تخصيصًا على الكومة واستدعاءً افتراضيًا. تجنبوا استخدامها في الحلقات الساخنة.
متى يكون auto كافيًا
بالنسبة إلى لامبدا قصيرة العمر (الممررة إلى الخوارزميات أو المخزنة في auto)، لا حاجة إلى محو النوع ولا توجد تكلفة إضافية.
إرجاع لامبدا
استخدموا auto نوعًا للإرجاع لإرجاع لامبدا. وينشئ كل استدعاء إغلاقًا جديدًا.
auto makeAdder(int n) {
return [n](int x) { return x + n; };
}
auto add5 = makeAdder(5);
std::cout << add5(10); // 15الدوال من الرتبة العليا
تجعل لامبدا من C++ بيئة مريحة للدوال من الرتبة العليا، أي الدوال التي تتلقى دوال أخرى أو تُرجعها.
تحقق سريع
ماذا يعني استخدام auto في قائمة معاملات لامبدا في C++14؟
مراجعة
تستخدم لامبدا العامة في C++14 معاملات auto لتحقيق تعدد الأشكال وقت الترجمة. ولكل لامبدا نوع إغلاق فريد؛ استخدموا auto للاحتفاظ بها، أو std::function عند الحاجة إلى محو النوع.
الأسئلة الشائعة
هل درس «Lambdas العامة وعمليات الإغلاق في C++14» مجاني؟
نعم — نص درس «Lambdas العامة وعمليات الإغلاق في C++14» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.
ماذا ستتعلم في «Lambdas العامة وعمليات الإغلاق في C++14»؟
اكتب Lambdas عامة بمعاملات auto، وفكّر في أنواع عمليات الإغلاق. تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟
لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «Lambdas العامة وعمليات الإغلاق في C++14»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟
نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- كائنات الدوال والدوال الكائنية
- التقاطات Lambda بالقيمة وبالمرجع وmutable
- Lambdas العامة وعمليات الإغلاق في C++14
- std::function والكائنات القابلة للاستدعاء بعد محو النوع