2013-10-29 8 views
9

मैं किसी अन्य वर्ग के निर्माता को टेम्पलेट क्लास कैसे पास करूं? मैं एक टेम्पलेटेड हैश टेबल क्लास को मेनू क्लास में पास करने की कोशिश कर रहा हूं जो मुझे उपयोगकर्ता को हैश टेबल के प्रकार का निर्णय लेने की अनुमति देगा।पैरामीटर के रूप में टेम्पलेट क्लास पास करना

template <class T> 
class OpenHash 
{ 
private: 
    vector <T> hashTab; 
    vector <int> emptyCheck; 
    int hashF(string); 
    int hashF(int); 
    int hashF(double); 
    int hashF(float); 
    int hashF(char); 

public: 
    OpenHash(int); 
    int getVectorCap(); 
    int addRecord (T); 
    int sizeHash(); 
    int find(T); 
    int printHash(); 
    int deleteEntry(T); 
}; 

template <class T> 
OpenHash<T>::OpenHash(int vecSize) 
{ 
    hashTab.clear(); 
    hashTab.resize(vecSize); 
    emptyCheck.resize(vecSize); 
    for (int i=0; i < emptyCheck.capacity(); i++) 
    { 
     emptyCheck.at(i) = 0; 
    } 
} 

तो मैं, इस वर्ग के ओपन हैश कि टेम्प्लेटेड है क्योंकि यह करता है, तो अपने मुख्य में इसके बारे में एक वस्तु शुरू करने और इनपुट प्रकार आदि

बदलने के लिए किसी भी प्रकार के जोड़े जाने के लिए, मैं इस काम कर रहा है अनुमति देने के लिए माना जाता
int main() 
{ 
    cout << "Please input the size of your HashTable" << endl; 
    int vecSize = 0; 
    cin >> vecSize; 
    cout << "Please select the type of you hash table integer, string, float, " 
      "double or char." << endl; 
    bool typeChosen = false; 
    string typeChoice; 
    cin >> typeChoice; 
while (typeChosen == false) 
{ 
    if (typeChoice == "int" || "integer" || "i") 
    { 
     OpenHash<int> newTable(vecSize); 
     typeChosen = true; 
    } 
    else if (typeChoice == "string" || "s") 
    { 
     OpenHash<string> newTable(vecSize); 
     hashMenu<OpenHash> menu(newTable); 
     typeChosen = true; 

    } 
    else if (typeChoice == "float" || "f") 
    { 
     OpenHash<float> newTable(vecSize); 
     typeChosen = true; 
    } 
    else if (typeChoice == "double" || "d") 
    { 
     OpenHash<double> newTable(vecSize); 
     typeChosen = true; 
    } 
    else if (typeChoice == "char" || "c" || "character") 
    { 
     OpenHash<char> newTable(vecSize); 
     typeChosen = true; 
    } 
    else 
    { 
     cout << "Incorrect type"; 
    } 
} 
return 0; 
} 

मेरे मुख्य में मैं उपयोगकर्ता से पूछना चाहता हूं कि हैश टेबल बनाने के लिए वे किस प्रकार हैं। वे जो भी दर्ज करते हैं उसके आधार पर इसे इस वर्ग के उदाहरण के साथ एक प्रकार का उदाहरण बनाना चाहिए और फिर इसे मेनू नामक किसी अन्य वर्ग में पास करना चाहिए जिससे उन्हें हैश क्लास से फ़ंक्शन कॉल करने की अनुमति मिलनी चाहिए।

+0

आप एक वर्ग टेम्पलेट या एक वर्ग टेम्पलेट विशेषज्ञता पारित करने के लिए करना चाहते हैं? जैसे 'std :: less' या' std :: कम '? – dyp

+0

हैशफ मेरा हैश फ़ंक्शन है। और मैं एक वर्ग को पास करना चाहता हूं जो templated है। – Shaun1810

उत्तर

13

आप उपयोग कर सकते हैं:

class Ctor { 
public: 
    Ctor(const Other<int>&); // if you know the specific type 
}; 

या:

class Ctor { 
public: 
    template<class T> 
    Ctor(const Other<T>&);  // if you don't know the specific type 
}; 

Live demo

संबंधित मुद्दे

 संबंधित मुद्दे