मान लीजिए मेरे पास एक क्लास टेम्पलेट है जिसमें सदस्य pData
है, जो AxB
अरबी प्रकार T
की सरणी है।यदि कथन के बाहर वर्ग टेम्पलेट का उदाहरण कैसे प्राप्त करें? (सी ++)
template <class T> class X{
public:
int A;
int B;
T** pData;
X(int a,int b);
~X();
void print(); //function which prints pData to screen
};
template<class T>X<T>::X(int a, int b){ //constructor
A = a;
B = b;
pData = new T*[A];
for(int i=0;i<A;i++)
pData[i]= new T[B];
//Fill pData with something of type T
}
int main(){
//...
std::cout<<"Give the primitive type of the array"<<std::endl;
std::cin>>type;
if(type=="int"){
X<int> XArray(a,b);
} else if(type=="char"){
X<char> Xarray(a,b);
} else {
std::cout<<"Not a valid primitive type!";
} // can be many more if statements.
Xarray.print() //this doesn't work, as Xarray is out of scope.
}
उदाहरण के तौर पर एक्सएआरई अगर किसी कथन के अंदर बनाया गया है, तो मैं इसे कहीं और उपयोग नहीं कर सकता। मैंने अगर बयानों से पहले एक पॉइंटर बनाने की कोशिश की लेकिन उस बिंदु पर पॉइंटर का प्रकार अज्ञात है, तो मैं सफल नहीं हुआ।
इस तरह की किसी समस्या से निपटने का एक उचित तरीका क्या होगा?
इसका कोई स्पष्ट "उत्तर" नहीं है क्योंकि सी ++ स्थिर रूप से टाइप किया गया है। आप उपयोगकर्ता को किसी प्रकार के लिए संकेत नहीं दे सकते हैं और फिर उस प्रकार को बना सकते हैं और इसे कहीं और उपयोग कर सकते हैं - आपको संकलन समय पर प्रकार को जानना होगा! एक ऐसी तकनीक जो आम तौर पर इस स्थिति को संबोधित करती है वह "टाइप एरर" है, लेकिन इसके लिए आवश्यक है कि * आप * कुछ सामान्य तत्व निर्दिष्ट करें जो आपके सभी प्रकारों के पास हो, और केवल उस सामान्य तत्व (जैसे "प्रिंट करने योग्य") के माध्यम से इंटरफेस हो। –
यहां, [यह] (http://stackoverflow.com/questions/1984492/runtime-determine-type-for-c) आपकी मदद कर सकता है। –