आप आसानी से उस वर्ग से विरासत कर सकते हैं:
class Derived: public TimerEvent {
...
};
लेकिन, आप अपने उपवर्ग में HandleTimer ओवरराइड नहीं कर सकते हैं और इस काम करने की उम्मीद:
TimerEvent *e = new Derived();
e->HandleTimer();
इसका कारण यह है स्थिर तरीकों डॉन है ' vtable में प्रवेश नहीं है, और इस प्रकार वर्चुअल नहीं हो सकता है। आप फिर भी उपयोग कर सकते हैं "शून्य * Arg" की तरह अपने उदाहरण के लिए सूचक ... कुछ पारित करने के लिए:
struct TimerEvent {
virtual void handle(int fd, short event) = 0;
static void HandleTimer(int fd, short event, void *arg) {
((TimerEvent *) arg)->handle(fd, event);
}
};
class Derived: public TimerEvent {
virtual void handle(int fd, short event) {
// whatever
}
};
इस तरह, HandleTimer अभी भी सी कार्यों से इस्तेमाल किया जा सकता है, बस हमेशा पारित "यह सुनिश्चित कर लें असली "ऑब्जेक्ट" शून्य * Arg "के रूप में।
स्रोत
2009-02-05 12:49:59
बस उत्तराधिकारी और इसे काम करना चाहिए। क्या आपको इसके साथ कोई विशेष समस्या है? – jpalecek
मैं उपर्युक्त टिप्पणी से सहमत हूं, मुझे प्रश्न समझ में नहीं आता है। –
मैं उपर्युक्त टिप्पणी तीसरा। :) –