Lambdas vs. Bind in C: تعدد الأشكال والكفاءة
عند مقارنة استخدام C 0x lambdas و std::bind لمهام مماثلة ، يمكن أن يتأثر الاختيار بين الاثنين بعوامل مثل تعدد الأشكال والكفاءة.
Bind vs. Lambda in التفاصيل
فكر في المثال التالي حيث يتم استخدام كل من lambda وbind لإنشاء أرقام عشوائية باستخدام التوزيع والمحرك:
// Using lambda auto dice = [&]() { return distribution(engine); }; // Using bind auto dice = bind(distribution, engine);
تعدد الأشكال
على عكس لامدا، وهي أحادية الشكل (أي لها أنواع ثابتة)، يسمح std::bind بتعدد الأشكال سلوك. هذا يعني أنه يمكن استخدام الربط لإنشاء دوال بأنواع غير معروفة، كما هو موضح أدناه:struct foo { typedef void result_type; القالب عامل التشغيل الفارغ () (أ أ، ب ب) { cout struct foo { typedef void result_type; template
الكفاءة بشكل عام، تميل لامدا إلى أن تكون أكثر كفاءة من الربط عندما يتم استخدام المتغيرات التي تم التقاطها حسب القيمة. وذلك لأن lambdas تلتقط المتغيرات مباشرة، بينما يقوم bind بإنشاء كائن إغلاق يشير إلى المتغيرات الملتقطة. ومع ذلك، قد يوفر bind مزايا عندما تكون المتغيرات الملتقطة كبيرة أو عندما يتم استدعاء الدالة بشكل متكرر.
الاستنتاجيعتمد الاختيار بين lambdas وbind على المتطلبات المحددة. من التطبيق. توفر Lambdas تعدد الأشكال وتكون فعالة في التقاط متغيرات صغيرة من نوع القيمة. يوفر Bind قدرًا أكبر من المرونة وقد يكون مفضلاً عند التعامل مع الوظائف الكبيرة أو التي يتم استدعاؤها بشكل متكرر.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3