2010-05-10 10 views
0

Si j'ai une définition de modèle comme celle ci-dessous, quelqu'un peut-il fournir un exemple de code pour savoir comment j'instancierais réellement une instance de ceci avec deux de mes propres classes?Utilisation du modèle C++

template <class T1, class T2> 
class LookUpTable { 
public: 
    LookUpTable(); 
    void set(T1 x, T2* y); 
    T2* get(T1 x); 
}; 

Merci.

Répondre

5

Vous ne pouvez pas l'instancier à moins de fournir une définition pour le constructeur. Et vous ne pourrez pas l'utiliser à moins de fournir des définitions pour les deux autres fonctions. Si vous avez fait les fournir, vous instanciez quelque chose comme:

LookUpTable <std::string, int> t; 

ou si vous avez vos propres classes A et B:

LookUpTable <A, B> t; 

On dirait que c'est une carte de quelque sorte, en auquel cas vous pouvez aussi bien utiliser std :: map:

#include <map> 
#include <string> 

std::map <std::string, int> m; 
+1

C'est ce que je pensais .. la chose dont je n'étais pas sûr était la définition du constructeur sans paramètre (et le nom de la classe) ne contenant aucun paramètre de type, je viens d'un arrière-plan C# . On peut supposer que l'implémentation du constructeur ressemble à 'LookUpTable() {* initialise internals *}'? – MalcomTucker

+1

@Malcolm Oui, bien que vous souhaitiez également étudier les listes d'initialisation des constructeurs. Et comme je l'ai suggéré, si ce n'est pas un exercice d'apprentissage, utilisez std :: map. –

+1

C'est un exercice d'apprentissage, et merci de nous aider :) – MalcomTucker

2

1) comme il est une classe de modèle, assurez-vous que votre constructeur et fonctions sont déclarées dans le header.

2) instancier comme ceci:

LookUpTable <YourClass1, YourClass2> table; 

3) Note: vous avez une faute de frappe, Tl au lieu de T1. Dans certaines polices l ressemble presque 1.

Questions connexes