لا يمكنك استخدام مؤشرات وظيفة الأعضاء كمؤشرات وظيفية طبيعية ، ما لم تكن وظائف الأعضاء static
. يجب عليك الاستخدام بدلاً من ذلك تعزيز الربط مع مثيل كائن معين:
boolConfigMap["USE_NEW_VERSION"] = boost::bind(&Config::useNewVersion, someInstanceOfConfig);
إن السبب في أن مؤشرات وظيفة الأعضاء (غير الستنية) ليست هي نفس مؤشرات الوظائف العادية (أو مؤشرات وظيفة الأعضاء الثابتة) هو أن وظائف الأعضاء لها حجة "صفر" مخفية ، وهي هي this
مؤشر داخل وظيفة العضو.
أيضا ، إعلانك عن boost::function
يجب أن تكون الكائنات فقط على سبيل المثال
boost::function<bool()>
التي ستتعامل مع جميع أنواع الوظائف التي تعود bool
وعدم أخذ الحجج.
إذا كان المترجم الخاص بك جديدًا بما يكفي ، فقد ترغب أيضًا في التغيير لاستخدامه std::function
و std::bind
.
بعد التحرير الخاص بك لتظهر مع مؤشرات وظيفة الأعضاء: عليك أن تسمي مؤشرات الوظيفة بشكل صحيح أيضًا ، مثل
(config.*configIter->second)();