मैं सी ++ में एक कक्षा को कार्यान्वित करना चाहता हूं जिसमें कॉलबैक है।मैं सी ++ में कॉलबैक कैसे कार्यान्वित करूं?
- लक्ष्य वस्तु:
तो मैं मैं एक विधि 2 तर्क हैं कि जरूरत है। (मान लें कि * myObj)
- लक्ष्य ऑब्जेक्ट के सदस्य फ़ंक्शन के सूचक। (तो मैं क्या कर सकते हैं * myObj-> memberFunc();)
शर्तें हैं:
myObj किसी भी वर्ग से हो सकता है।
कॉलबैक फ़ंक्शन होने वाला सदस्य फ़ंक्शन गैर स्थैतिक है।
मैं इस बारे में पढ़ रहा हूं लेकिन ऐसा लगता है कि मुझे हाथ से पहले myObj की कक्षा जानने की आवश्यकता है। लेकिन मुझे यकीन नहीं है कि यह कैसे करें। इससे मैं किस तरह निपट सकता हूं? क्या यह सी ++ में संभव है?
यह मेरे मन में कुछ है लेकिन निश्चित रूप से गलत है।
class MyClassWithCallback{
public
void *targetObj;
void (*callback)(int number);
void setCallback(void *myObj, void(*callbackPtr)(int number)){
targetObj = myObj;
callback = callbackPtr;
};
void callCallback(int a){
(myObj)->ptr(a);
};
};
class Target{
public
int res;
void doSomething(int a){//so something here. This is gonna be the callback function};
};
int main(){
Target myTarget;
MyClassWithCallback myCaller;
myCaller.setCallback((void *)&myTarget, &doSomething);
}
मैं किसी भी मदद की सराहना करते हैं।
धन्यवाद।
अद्यतन आप में से अधिकांश ने कहा कि निरीक्षण और प्रतिनिधिमंडल, ठीक है, मैं वही हूं जो मैं ढूंढ रहा हूं, मैं एक उद्देश्य-सी/कोको दिमागी लड़का हूं। मेरा वर्तमान कार्यान्वयन आभासी कार्यों के साथ इंटरफेस का उपयोग कर रहा है। क्या मैंने सोचा कि इंटरफ़ेस को परिभाषित करने के बजाय ऑब्जेक्ट और सदस्य फ़ंक्शन पॉइंटर (जैसे बूस्ट!) को पास करने के लिए यह "चालाक" होगा। लेकिन ऐसा लगता है कि हर कोई इस बात से सहमत है कि इंटरफेस सही तरीका है? बूस्ट एक अच्छा विचार प्रतीत होता है, (माना जाता है)
पर्यवेक्षक पैटर्न को "मनाए गए" वर्ग इंटरफ़ेस में परिवर्तन की आवश्यकता होती है, कभी-कभी यह इंटरफ़ेस के बजाय 'फ़ंक्शन' और 'बाइंड' का उपयोग करना बहुत आसान और स्पष्ट होता है। यह भी ध्यान दें, अगर आप हालिया जीसीसी का उपयोग कर रहे हैं, तो आपके पास पहले से ही 'फंक्शन' और 'बाइंड' है इसलिए बूस्ट की कोई आवश्यकता नहीं है। इंटरफेस का उपयोग करते समय फ़ंक्शन/बाइंड का कार्यात्मक प्रोग्रामिंग पैटर अधिक "मानक" डिज़ाइन पैटर्न का उपयोग कर रहा है जिसका अलग अर्थ – Artyom