سؤال

أحاول الحصول على مؤشر إلى نسخة محددة من محملة وظيفة العضو. هذا هو المثال:

class C
{
  bool f(int) { ... }
  bool f(double) { ... }

  bool example()
  {
    // I want to get the "double" version.
    typedef bool (C::*MemberFunctionType)(double);
    MemberFunctionType pointer = &C::f;   // <- Visual C++ complains
  }
};

رسالة الخطأ هي "خطأ C2440:" التهيئة ": لا يمكن تحويلها من" الوظيفة الزائدة "إلى" العضو FunctionType "" "

هذا يعمل إذا f لا يتم تحميله بشكل زائد ، ولكن ليس في المثال أعلاه. أي اقتراح؟

تعديل

احذر ، لم يعكس الرمز أعلاه مشكلتي في العالم الحقيقي ، والتي كانت قد نسيت "const" - هذا ما تشير إليه الإجابة المقبولة. سأترك السؤال كما هو ، لأنني أعتقد أن المشكلة قد تحدث للآخرين.

هل كانت مفيدة؟

المحلول

حسنًا ، سأجيب على ما أضعه كتعليق بالفعل حتى يمكن قبوله. المشكلة مع القدة:

class C
{
  bool f(int) { ... }
  bool f(double) const { ... }

  bool example()
  {
    // I want to get the "double" version.
    typedef bool (C::*MemberFunctionType)(double) const; // const required!
    MemberFunctionType pointer = &C::f;
  }
};

توضيح:

السؤال الأصلي لم يحتوي على ذلك const. لقد تخمنت في التعليقات ما إذا كان لديه ربما f كونه وظيفة عضو في كونست في الكود الحقيقي (لأنه في التكرار السابق ، اتضح أن هناك شيئًا آخر مفقودًا/مختلفًا عن رمز العالم الحقيقي: P). لقد كان في الواقع وظيفة عضو في كونست ، وأخبرني أنه ينبغي عليّ نشر هذا كإجابة.

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