Boost :: Function and Boost :: Bind رائع ، ولكن ما هو رائع حقًا حول Boost :: Lambda؟
-
24-09-2019 - |
سؤال
في الصفحة 175 الفقرة 1 من فعالة C ++ مايرز لديه هذا القول عن الفوذات المعممة والربط:
أجد ما
tr1::function
يتيح لك أن تفعل ذلك مذهلاً ، فهذا يجعلني وخز في كل مكان. إذا لم تكن وخزًا ، فقد يكون ذلك لأنك تحدق في تعريف ... وتتساءل عما يحدث مع ....
وأنا أتفق معه على الربط والوظيفة. حول Lambda ، حسنًا ، أفهم ما يفعله Lambda وكيف يفعل ذلك ، لكن هل يمكن لشخص ما أن ينشر مقتطفًا على نمط الكتب أو مخطط لفظي لسبب من المفترض أن يفترض Lambda (في مصطلحات Meyers) جواربي؟ أسأل لأن كل منطقة من C ++ حيث يتم استخدام بناء جملة العنصر النائب يبدو وكأنه اختراق لي (نعم ، أعرف ما يكفي عن الطريقة الوظيفية ، لذا يرجى عدم وجود أساسيات) ، وأنا أتفق مع الطريقة التي يتم استخدامها في Bind و MPL ؛ ومع ذلك ، في حالة Lambda ، أريد فقط أن أبررها حتى أتمكن من تحديد الطقس ، يجب أن أدخله في ذخيرتي.
-- تعديل --
هذا حتى الإجابة يذكر أن الإنشاء المضمّن لمورطية باستخدام بناء جملة حامل فقط ، ويذكر الاستخدام المتقدم ، وربما يكون هذا ما أنا عليه بعد ... في الاستخدام المتقدم ، هل ما زال هناك خلق مضمّن فقط من الفوشرات؟
المحلول
بناءً على التعليقات المتبقية أعلاه ، والرابط في السؤال ، فإن الإجابة التالية هي الإجابة التي أقبلها (مجتمع المجتمع):
Boost.lambda يملأ الغرض من إنشاء functor المضمّن (هذا هو المصطلح الذي أحبه). يمكن ملء هذه الوظيفة عن طريق الوظيفة + ربط ، لكنها أكثر مطوّلة مما يجب أن تكون ، وبالنسبة للضغط البسيط ، هذا غير ضروري - على سبيل المثال ، النوع الموضح في التعليقات أعلاه.
من الواضح أن هناك تداخلًا دلاليًا بين زوج الوظيفة و Lambda-هذا قطعة أثرية تاريخية ، ولأن Lambda لديها سبب الوجود, ، هو موجود في التعزيز.
نصائح أخرى
ما هو "رائع" حول هذا الأمر ، كما هو الحال مع تعزيز foreach و تعزيز المعلمة, ، حقن/تمديد بناء الجملة إلى C ++ والذي ليس في اللغة ، أي أنه يحاكي وظائف مجهولة المصدر مباشرة كمعلمات.