كيفية الحصول على عنوان وظيفة العضو المحملة؟
-
22-08-2019 - |
سؤال
أحاول الحصول على مؤشر إلى نسخة محددة من محملة وظيفة العضو. هذا هو المثال:
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). لقد كان في الواقع وظيفة عضو في كونست ، وأخبرني أنه ينبغي عليّ نشر هذا كإجابة.