C वर्चुअल टेम्पलेट विधि
सी में, स्थिर समय बहुरूपता (टेम्पलेट्स) को रनटाइम बहुरूपता के साथ जोड़ना चुनौतीपूर्ण हो सकता है। यह निम्नलिखित अमूर्त वर्ग में स्पष्ट है:
class AbstractComputation {
public:
template virtual void setData(std::string id, T data);
template virtual T getData(std::string id);
};
इस वर्ग का लक्ष्य एक विशिष्ट पहचानकर्ता के आधार पर एक निर्दिष्ट प्रकार का डेटा सेट करना और पुनर्प्राप्त करना है। हालाँकि, जेनेरिक सेटडेटा फ़ंक्शन को एक विशिष्ट प्रकार के साथ कॉल करने का प्रयास करते समय एक समस्या उत्पन्न होती है, जैसे कि setData
भाषा इस निर्माण को प्रतिबंधित करती है क्योंकि कंपाइलर को गतिशील रूप से काम करना होगा संभावित टेम्पलेट इन्स्टेन्शियेशन की अनंत संख्या भेजें। इस समस्या को हल करने के लिए, कई दृष्टिकोण संभव हैं:
स्थैतिक बहुरूपता को हटाना:
class AbstractComputation {
public:
template
void setData( std::string const & id, T value ) {
m_store.setData( id, value );
}
template
T getData( std::string const & id ) const {
return m_store.getData( id );
}
protected:
ValueStore m_store;
};
गतिशील बहुरूपता को हटाना:
class AbstractComputation {
public:
template
void setData( std::string const & id, T value ) {
setDataImpl( id, boost::any( value ) );
}
template
T getData( std::string const & id ) const {
boost::any res = getDataImpl( id );
return boost::any_cast( res );
}
protected:
virtual void setDataImpl( std::string const & id, boost::any const & value ) = 0;
virtual boost::any getDataImpl( std::string const & id ) const = 0;
};
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3