std::for_each، استدعاء وظيفة العضو مع المعلمة المرجعية

StackOverflow https://stackoverflow.com/questions/637441

  •  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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top