हम एक उप-परियोजना 'commonUtils' है कि माता-पिता परियोजना भर में इस्तेमाल किया कई सामान्य कोड-स्निपेट हैं। एक ऐसी रोचक सामग्री मैंने देखा था: -परीक्षण करें कि एक वर्ग बहुरूपी है
/*********************************************************************
If T is polymorphic, the compiler is required to evaluate the typeid
stuff at runtime, and answer will be true. If T is non-polymorphic,
the compiler is required to evaluate the typeid stuff at compile time,
whence answer will remain false
*********************************************************************/
template <class T>
bool isPolymorphic() {
bool answer=false;
typeid(answer=true,T());
return answer;
}
मैं टिप्पणी माना जाता है और सोचा कि यह काफी एक दिलचस्प टेम्पलेट है, हालांकि यह परियोजना भर में उपयोग नहीं किया है। मैंने इसे जिज्ञासा के लिए इस तरह इस्तेमाल करने की कोशिश की ...
class PolyBase {
public:
virtual ~PBase(){}
};
class NPloyBase {
public:
~NBase(){}
};
if (isPolymorphic<PolyBase>())
std::cout<<"PBase = Polymorphic\n";
if (isPolymorphic<NPolyBase>())
std::cout<<"NBase = Also Polymorphic\n";
लेकिन उनमें से कोई भी कभी भी सत्य नहीं लौटाता है। एमएसवीसी 2005 कोई चेतावनी नहीं देता है लेकिन कमौ ने चेतावनी दी है कि टाइपिड अभिव्यक्ति का कोई प्रभाव नहीं है। सी ++ मानक में धारा 5.2.8 कुछ भी नहीं कहता है जैसे टिप्पणी कहती है i.e. टाइपिड का मूल्यांकन गैर-पॉलीमोर्फिक प्रकारों के लिए संकलन समय पर और पॉलिमॉर्फिक प्रकारों के लिए रनटाइम पर किया जाता है।
1) तो मैं लगता है कि टिप्पणी भ्रामक/सादे गलत या के बाद से इस कोड के लेखक काफी वरिष्ठ सी ++ प्रोग्रामर है, मैं कुछ याद आ रही है?
2) OTOH, मैं अगर हम परीक्षण कर सकते हैं कि क्या एक वर्ग बहुरूपी है (कम से कम एक आभासी समारोह है) कुछ तकनीक का उपयोग कर सोच रहा हूँ?
3) जब एक जानना चाहते हो, तो एक वर्ग बहुरूपी है? ऐसे ही अनुमान लगाना; dynamic_cast<void*>(T)
(dynamic_cast
केवल पॉलिमॉर्फिक कक्षाओं पर काम करता है) का उपयोग कर कक्षा के प्रारंभ पते को प्राप्त करने के लिए।
अपनी राय प्रतीक्षा कर रहा है।
अग्रिम धन्यवाद,
एर, यदि लेखक एक वरिष्ठ सी ++ प्रोग्रामर है तो आप पहले उसके साथ क्यों जांच नहीं करते? ... आप अक्सर अनुभवी लोगों से बहुत कुछ सीखेंगे। – stefanB
ठीक है, अगर मैं इसे stackoverflow पर नहीं पूछ सकता था :-) – Abhay