2009-04-01 10 views
18

मैं के एक विशिष्ट संस्करण के लिए पॉइंटर प्राप्त करने की कोशिश कर रहा हूं सदस्य फ़ंक्शन ओवरलोड किया गया। यहाँ उदाहरण है:ओवरलोडेड सदस्य फ़ंक्शन का पता कैसे प्राप्त करें?

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: 'आरंभ': 'अतिभारित-समारोह' से परिवर्तित नहीं कर सकते 'MemberFunctionType' करने के लिए"

यह काम करता है अगर f ओवरलोड न हो जाए, लेकिन नहीं उपरोक्त उदाहरण में। कोई उपाय?

संपादित

खबरदार, कोड ऊपर मेरी वास्तविक दुनिया समस्या है, जो था कि मैं भूल गया था एक "स्थिरांक" प्रतिबिंबित नहीं किया - यह है कि क्या स्वीकार किए जाते हैं जवाब बताते है। मैं सवाल छोड़ दूंगा क्योंकि यह है, क्योंकि मुझे लगता है कि समस्या दूसरों के साथ हो सकती है।

+0

ने एक त्वरित परीक्षण किया और सब कुछ संकलित करता है। कोड ठीक दिखता है - यदि यह आपका मूल कोड है: डी क्या आप भी बिल्कुल इस तरह के कॉन्स्टेस हैं? –

+0

एमएसवीसी का आप किस संस्करण का उपयोग कर रहे हैं। यह 2008 में ठीक काम करता है। – Eclipse

+0

बेशक। मुझे बहुत अच्छा आनंद मिलेगा: पी –

उत्तर

27

ठीक है, मैं जवाब दूंगा कि मैंने पहले से ही टिप्पणी के रूप में क्या रखा है, इसलिए इसे स्वीकार किया जा सकता है। समस्या constness साथ है:

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 वास्तविक कोड में एक कॉन्स्ट सदस्य फ़ंक्शन है (क्योंकि अभी तक पहले के पुनरावृत्ति पर, यह अभी भी एक और चीज असली दुनिया कोड के लिए गायब/अलग थी: पी)। वह वास्तव में एक कॉन्स सदस्य समारोह था, और मुझे बताया कि मुझे इसे एक उत्तर के रूप में पोस्ट करना चाहिए।

+1

मुझे सूचक घोषणा में क्यों रोकना है !!?? –

+0

मुझे भ्रम के लिए खेद है। मेरा जवाब अपडेट किया गया। –

+1

क्या अविश्वसनीय उत्तर है। यह मेरे कोड के साथ भी सही समस्या थी। पागल है कि आपने अनुमान के आधार पर इसका निदान किया था। – Raptormeat

संबंधित मुद्दे