2011-10-15 20 views
6

मैं सी ++ सदस्य समारोह संकेत बुला और structs में संकेत बुला के बारे में जानकारी मिल गया है से सदस्य समारोह सूचक है, लेकिन मैं एक सदस्य समारोह सूचक है कि एक संरचना के अंदर मौजूद कॉल करने की आवश्यकता है, और मैं करने में सक्षम नहीं किया गया है वाक्यविन्यास सही प्राप्त करें।कॉलिंग सी ++ एक struct

void MyClass::run() { 
    struct { 
     int (MyClass::*command)(int a, int b); 
     int id; 
    } functionMap[] = { 
     {&MyClass::commandRead, 1}, 
     {&MyClass::commandWrite, 2}, 
    }; 

    (functionMap[0].MyClass::*command)(x, y); 
} 

int MyClass::commandRead(int a, int b) { 
    ... 
} 

int MyClass::commandWrite(int a, int b) { 
    ... 
} 

यह मैं देता है:: मैं एक विधि के अंदर निम्नलिखित स्निपेट वर्ग MyClass में है।

error: expected unqualified-id before '*' token 
error: 'command' was not declared in this scope 
(referring to the line '(functionMap[0].MyClass::*command)(x, y);') 

का उपयोग कर की सिफारिश वाक्यविन्यास त्रुटियों में परिणाम आसपास के लोगों कोष्ठक बढ़ते * या -> * न जो काम का इस दशा में। क्या कोई उचित वाक्यविन्यास जानता है?

+0

http://stackoverflow.com/questions/990625/c-function-pointer-class-member-to-non-static-member-function इस प्रश्न से संबंधित लगता है। स्पष्टीकरण के लिए – Rudi

उत्तर

8

उपयोग:

(this->*functionMap[0].command)(x, y); 

परीक्षण किया गया और compiles ;)

+0

आह सही! प्रतिक्रिया के लिए धन्यवाद, और उपर्युक्त उत्तर तर्क प्रदान करता है। – aaron

5

मैं किसी भी कोड संकलित नहीं किया है, लेकिन मैं आपको कुछ चीजें भूल रहे हैं देख सकते हैं बस इसे देख से।

  • MyClass:: हटाएं जहां से आप फ़ंक्शन पॉइंटर को कॉल करते हैं। ताकि आप MyClass का एक उदाहरण की जरूरत है इसे कहते हैं इसका मतलब है कि
  • , कार्यों के लिए this सूचक पारित करने के लिए (अगर वे किसी भी उदाहरण डेटा का उपयोग) की आवश्यकता है।

(के बाद अनुसंधान के एक बिट) ऐसा लगता है कि कुछ इस तरह (भी @VoidStar करने के लिए धन्यवाद) क्या करने की जरूरत:

(this->*(functionMap[0].command)(x, y)); 
+0

धन्यवाद। नीचे इस सवाल का जवाब भी शामिल है 'इस' 'functionMap' के स्थान पर। प्रतिक्रिया के लिए धन्यवाद कोष्ठक के साथ काम करता (। – aaron

+0

मैं अगर यह उन या कि समस्या मैं शायद एक अलग समाधान की कोशिश करेंगे के लिए आवश्यक नहीं। हालांकि बिल्कुल यकीन नहीं था, जैसे कि अगर किसी का उपयोग करना है, या यदि अधिक लचीलापन की आवश्यकता है तो कुछ प्रकार के कमांड पैटर्न की आवश्यकता होती है। – Daemin

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