std::for_each، استدعاء وظيفة العضو مع المعلمة المرجعية
-
10-07-2019 - |
سؤال
لدي حاوية من المؤشرات التي أريد التكرار عليها، واستدعاء دالة عضو تحتوي على معلمة تعتبر مرجعًا.كيف أفعل هذا مع STL؟
الحل الحالي هو استخدام Boost::bind و Boost::ref للمعلمة.
// Given:
// void Renderable::render(Graphics& g)
//
// There is a reference, g, in scope with the call to std::for_each
//
std::for_each(
sprites.begin(),
sprites.end(),
boost::bind(&Renderable::render, boost::ref(g), _1)
);
السؤال ذو الصلة (الذي استمدت منه الحل الحالي) هو Boost::bind مع الوظائف التي تحتوي على معلمات تعتبر مراجع.يسأل هذا على وجه التحديد كيفية القيام بذلك مع التعزيز.أنا أسأل كيف سيتم ذلك بدون يعزز.
يحرر:هناك طريقة للقيام بنفس الشيء دون استخدام أي منها boost
.باستخدام std::bind
والأصدقاء يمكن كتابة نفس الكود وتجميعه في مترجم متوافق مع C++ 11 مثل هذا:
std::for_each(
sprites.begin(),
sprites.end(),
std::bind(&Renderable::render, std::placeholders::_1, std::ref(g))
);
المحلول
وهذه هي المشكلة مع تصميم <functional>
. اما أن يكون استخدام دفعة :: ربط أو TR1 :: مأزق.
نصائح أخرى
الدفع كيفية استخدام std::foreach مع المعلمات/التعديل.يوضح السؤال كيفية القيام بذلك باستخدام حلقة for.تعطي الإجابة المقبولة مثالاً لكيفية تحقيق ذلك باستخدام خوارزمية for_each.