2010-04-06 10 views
6

क्या सी ++ में इंटरफेस का उचित कार्यान्वयन है जो vtable का उपयोग नहीं करता है?क्या सी ++ में इंटरफ़ेस का स्थिर पॉलीमोर्फिज्म कार्यान्वयन है जो vtable का उपयोग नहीं करता है?

उदाहरण के लिए

class BaseInterface{ 
public: 
virtual void func() const = 0; 
} 

class BaseInterfaceImpl:public BaseInterface{ 
public: 
void func(){ std::cout<<"called."<<endl; } 
} 

BaseInterface* obj = new BaseInterfaceImpl(); 
obj->func(); 

अंतिम पंक्ति में समारोह के लिए कॉल BaseInterfaceImpl :: समारोह के समारोह ptr खोजने के लिए vtable को जाता है, लेकिन वहाँ किसी भी सी ++ तरीका है कि सीधे करने के लिए है के रूप में BaseInterfaceImpl नहीं है शुद्ध इंटरफेस वर्ग बेसइंटरफेस के अलावा किसी भी अन्य वर्ग से उपclassed?

धन्यवाद। गिल।

+0

यदि आप vtable के माध्यम से जाते हैं तो आप परवाह क्यों करेंगे? – Thomas

+0

coz मैं एक परियोजना पर काम कर रहा हूं जहां गति मायने रखती है। भी, मुझे लगता है कि vtable पूर्ण ओओ polymorphism के लिए एक अच्छा समाधान है, लेकिन 'इंटरफ़ेस' को लागू करने के लिए एक overkill है और मुझे उम्मीद है कि कुछ हल्का समाधान मौजूद होगा .. – gilbertc

+0

@gilbertc: मुझे लगता है कि यहां एक गलतफहमी है। * इंटरफेस की अवधारणा का कोई भी * उचित "कार्यान्वयन vtable जैसा कुछ होगा। अन्यथा, गतिशील बहुरूपता असंभव होगा। – Thomas

उत्तर

7

हां। यह moniker CRTP द्वारा चला जाता है। एक गैंडर है।

+0

विशेष रूप से, "स्टेटिक पॉलिमॉर्फिज्म" शीर्षक: http://en.wikipedia.org/wiki/Template_metaprogramming#Static_polymorphism शायद आप इसे संपादित कर सकते हैं उदाहरण में आपके जवाब में? – Thomas

+0

@ थॉमस: धन्यवाद। ईडी। – gilbertc

+0

कोई समस्या नहीं है। मैं बहुत उत्सुक हूं, आपका कोड वह अनुकूलित है जहां एक vtable लुक-अप का छोटा ओवरहेड भी प्रदर्शन को नुकसान पहुंचा रहा है? क्या आवेदन? आम तौर पर इसे एक स्पेस सेवर या आरएआईआई चिंता के कार्यान्वयन में उपयोग किया जाता है। – wheaties

0

मुझे लगता है कि किसी भी भाषा में, इसे गतिशील प्रेषण करने के लिए एक vtable के समतुल्य पर जाना होगा, जब तक कि यह संकलित समय पर नहीं जानता कि किस फ़ंक्शन को कॉल करने की आवश्यकता है। यह एक चालाक कंपाइलर अनुकूलन, या सीआरटीपी जैसी तकनीक (जो गेहूं पहले से ही उल्लेख किया गया है) का परिणाम हो सकता है।

+0

और वैसे, मैं समझने में असमर्थ हूं कि vtable के माध्यम से जाने के बारे में क्या कहते हैं "अनुचित"। – rmeador

+0

@ थॉमस, रेमेडोर: इस बात पर सहमति हुई कि मुझे उचित शब्द का उपयोग नहीं करना चाहिए। अंतरफलक के 'अधिक कुशल' और 'प्रकाश' कार्यान्वयन की दिशा के साथ होना चाहिए। – gilbertc

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