मान लीजिए मैं एक आधार वर्ग जो व्युत्पन्न वर्ग की क्लोनिंग है:व्युत्पन्न दिलचस्प आवर्ती टेम्पलेट्स और सहप्रसरण
class Base
{
public:
virtual Base * clone()
{
return new Base();
}
// ...
};
मैं व्युत्पन्न वर्ग है जो एक दिलचस्प आवर्ती टेम्पलेट पद्धति का उपयोग कर कार्यान्वित किया जाता है का एक सेट है:
template <class T>
class CRTP : public Base
{
public:
virtual T * clone()
{
return new T();
}
// ...
};
और मैं आगे इस तरह से प्राप्त करने के प्रयास:
class Derived : public CRTP<Derived>
{
public:
// ...
};
मैं के प्रभाव के लिए संकलन त्रुटियों मिलती है:
error C2555: 'CRTP<T>::clone': overriding virtual function return type differs and is not covariant from 'Base::clone'
मुझे पता है यह शायद पूरी तरह से नहीं व्युत्पन्न जब instantiating CRTP के लिए विरासत पेड़ जानने संकलक का परिणाम है। इसके अलावा, रिटर्न प्रकार (टी *) को बदलकर (बेस *) को भी संकलित करता है। हालांकि, मैं जानना चाहता हूं कि उपरोक्त अर्थशास्त्र को बरकरार रखने वाला कोई काम है या नहीं।
इसके लायक होने के लिए, जीसीसी 4.1.2 और 4.7.1 दोनों समान त्रुटियां देते हैं। –
http://stackoverflow.com/questions/15570333/crtp-and-dynamic-polymorphism-compile-error – erikced
@erikced का डुप्लिकेट सिर के लिए धन्यवाद। ऐसा लगता है कि मैं इतना कुछ नहीं कर सकता, मैं सिर्फ वापसी प्रकार को प्रतिस्थापित कर दूंगा। – Whanhee