2013-10-29 23 views
9

Wie übergebe ich eine Vorlagenklasse an den Konstruktor einer anderen Klasse? Ich versuche, eine Template-Hash-Tabellenklasse an eine Menü-Klasse zu übergeben, die es mir erlaubt, dem Benutzer dann zu erlauben, den Typ der Hash-Tabelle zu bestimmen.Übergeben der Vorlagenklasse als Parameter

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; 
    } 
} 

So habe ich diese Klasse öffnen Hash, der auf Vorlagen, weil es jede Art soll ermöglichen hinzugefügt werden, ich habe Arbeit dies, wenn ein Objekt davon in meinem Haupt initiieren und Eingabe ändern Typen usw.

In meinem Haupt möchte ich den Benutzer fragen, welche Art sie die Hash-Tabelle zu machen. je nachdem, was sie eingeben, sollte sie eine Instanz dieser Klasse mit dem gewünschten Typ erstellen und diese dann an eine andere Klasse mit dem Namen menu übergeben, die es ihnen ermöglichen soll, Funktionen aus der Hash-Klasse aufzurufen.

+0

Haben Sie eine Klassenvorlage oder eine Klasse Template-Spezialisierung übergeben möchten? Z.B. 'std :: less' oder' std :: less '? – dyp

+0

hashF ist meine Hash-Funktion. und ich möchte eine Klasse weitergeben, die als Vorlage dient. – Shaun1810

Antwort

13

Sie verwenden können:

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

oder:

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

Live demo

Verwandte Themen