मेरे पास प्रकारों का पदानुक्रम है - जेनेरिक क्लास और कई व्युत्पन्न कक्षाएं, दिलचस्प DerivedClass शामिल है, जेनेरिक क्लास पॉलिमॉर्फिक है। एक इंटरफेसक्या गतिशील_कास्ट का उपयोग करने से रनटाइम पर ऑब्जेक्ट प्रकार का पता लगाने का कोई तेज़ तरीका है?
interface ICallback {
virtual void DoStuff(GenericClass*) = 0;
};
जो मुझे लागू करने की आवश्यकता है। तब मैं जब GenericClass * सूचक ICallback में पारित मामले का पता लगाने के लिए चाहते हैं :: DoStuff() वास्तव में InterestingDerivedClass के लिए सूचक है:
class CallbackImpl : public ICallback {
void DoStuff(GenericClass* param) {
if(dynamic_cast<InterestingDerivedClass*>(param) != 0) {
return; //nothing to do here
}
//do generic stuff
}
}
GenericClass और व्युत्पन्न वर्ग मेरे नियंत्रण से बाहर है, मैं केवल CallbackImpl को नियंत्रित कर रहे हैं ।
मैं dynamic_cast बयान का समय समाप्त हो - यह 1400 चक्र जो पल के लिए स्वीकार्य है लेता है, लेकिन बहुत तेजी से नहीं की तरह दिखता है। मैंने डीबगर में गतिशील_कास्ट के दौरान निष्पादित किए गए सामानों को हटाने की कोशिश की और देखा कि इसमें बहुत सारे निर्देश हैं।
के बाद से मैं वास्तव में व्युत्पन्न वर्ग के लिए सूचक की ज़रूरत नहीं है वहाँ केवल RTTI का उपयोग कर कार्यावधि में ऑब्जेक्ट प्रकार का पता लगाने के एक तेज़ तरीका है? हो सकता है कि कुछ कार्यान्वयन-विशिष्ट विधि जो केवल "एक" संबंध जांचती है लेकिन सूचक को पुनर्प्राप्त नहीं करती है?
http://stackoverflow.com/questions/500493/c-equivalent-of-instanceof –