मैं अपनी विरासत पेड़ में वर्गों में से एक के एक निर्माता के भीतर, एक वस्तु के सबसे व्युत्पन्न वर्ग को खोजने के लिए कोशिश कर रहा हूँ। मैंने अब इस पर कई घंटे बिताए हैं और मैं इस बात के लिए हानि में हूं कि मैं इसे और कैसे कर सकता हूं या इसका अर्थ क्यों नहीं है। ऐसा लगता है कि यह सही समझ में आता है, फिर भी यह काम करने से इंकार कर देता है। मुझे आरटीटीआई के बारे में कई पेज मिल गए हैं और मूल रूप से उनके साथ कहीं भी नहीं मिला है। मैं अपने टेस्ट केस और उसके आउटपुट के बाद समझाऊंगा।क्या यह "पॉइंटर आरटीटीआई-सक्षम है?
स्रोत:
#include <iostream>
#include <typeinfo>
#include <string>
class A
{
public:
A(std::string foo);
virtual void bar(A* a) = 0;
};
class B : public A
{
public:
B();
virtual void bar(A* a);
};
A::A(std::string foo)
{
std::cout << "type as passed to A constructor: " << foo << " (" << this << ")" << std::endl;
std::cout << "type as determined in A constructor: " << typeid(*this).name() << " (" << this << ")" << std::endl;
}
B::B() : A(typeid(*this).name())
{
A* a = (A*)this;
std::cout << "type as determined in B constructor: " << typeid(*a).name() << " (" << this << ")" << std::endl;
this->bar(this);
}
void B::bar(A* a)
{
std::cout << "type as determined in bar: " << typeid(*a).name() << " (" << a << ")" << std::endl;
}
int main()
{
B b;
b.bar(&b);
return 0;
}
(++ जी पर) उत्पादन:
type as passed to A constructor: 1B (0x7fff5fbff910)
type as determined in A constructor: 1A (0x7fff5fbff910)
type as determined in B constructor: 1B (0x7fff5fbff910)
type as determined in bar: 1B (0x7fff5fbff910)
type as determined in bar: 1B (0x7fff5fbff910)
मैं कहना है बजाय "1 ए" के "1 बी" उत्पादन की दूसरी पंक्ति पाने के लिए कोशिश कर रहा हूँ । आरटीटीआई किसी कारण से "इस" से छीन लिया गया है, मैं अभी तक कल्पना नहीं कर सकता? यह वर्चुअल फ़ंक्शंस के विचार को कैसे तोड़ता है? (मैं आभासी कार्यों के साथ यह लागू किया जब तक मुझे पता चला मैं RTTI, जो मैं पहले की ज्ञात नहीं था का हिस्सा reimplementing किया गया था।) उत्पादन पता चलता है, मैं यह काम कर सकते हैं अगर मैं का उपयोग कर से बचने "इस," लेकिन जरूरत ऐसा करने के लिए डिजाइन द्वारा टूटने की तरह लग रहा है।
आप इस प्रकार का पता लगाने की कोशिश क्यों कर रहे हैं? यह असहज है। यह किसी और चीज के प्रयास (दोषपूर्ण) समाधान की तरह लगता है, यह और कुछ क्या है? –
अल्फ, मेरे पास std :: प्रकार के मानचित्र हैं (std :: स्ट्रिंग्स, इस मामले में) ऑब्जेक्ट्स में, प्रत्येक प्रकार के मानचित्र के भीतर एक अद्वितीय ऑब्जेक्ट होता है। किसी निश्चित वर्ग के प्रत्येक उदाहरण का अपना नक्शा होता है, ताकि इन ऑब्जेक्ट्स में नई ऑब्जेक्ट्स को आसानी से जोड़ा जा सके और बाद में टाइप द्वारा पुनर्प्राप्त किया जा सके। (मैं आरटीटीआई के बारे में जानता था, इससे पहले कि मैं उसी कारण के बराबर विफलता के साथ कॉन्स्टेंट और वर्चुअल तरीकों का एक वेब कर रहा था।) – Grault