تخزين مؤشرات وظيفة العضو في كائنات std العامة::function
عند محاولة تخزين مؤشرات وظيفة العضو من فئة معينة في الخريطة باستخدام std::function، قد يواجه المطورون خطأً: "لا يتم تقييم المصطلح إلى دالة تأخذ 0 وسيطات." ينشأ هذا الخطأ عند تعيين مؤشر وظيفة العضو مباشرةً إلى كائن الوظيفة std::function.
&&&] يكمن جوهر المشكلة في حقيقة أن وظائف العضو غير الثابتة تتطلب مؤشر "هذا" ضمنيًا باعتباره الوسيط الأول . لتصحيح هذا، يجب أن تكون الوسيطة الأولى مرتبطة بشكل صريح.الحل:
std::functionstd::functionيربط هذا الأسلوب بشكل فعال المؤشر "هذا" باعتباره الوسيط الأول، مما يسمح لكائن std::function بالتقاط العضو بشكل صحيح function.f = std::bind(&Foo::doSomething, this);
التعامل مع الوظائف ذات المعلمات:بالنسبة لوظائف الأعضاء ذات المعلمات، يجب تحديد العناصر النائبة للإشارة إلى موضع الوسائط المرتبطة.
باستخدام مساحة الاسم std::placeholders;
std::function
std::functionبناء جملة C 11 Lambda:f = std::bind(&Foo::doSomething, this);
إذا كان المترجم يدعم C 11 lambdas، فيمكن استخدام نهج أكثر إيجازًا:
std::function
std::functionf = [=](int a, int b) { this->doSomethingArgs(a, b); };
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3