2012-12-28 1 views
1

J'ai une classe de modèle et que vous souhaitez construire une méthode de modèle pour la classe avec le même type de modèle, il aime comme suitméthodes de modèle dans la classe de modèle avec le même type de modèle

template<class T> 
class A 
{ 
public: 
    void Set<T>(const T& t) {...} // I think this is wrong. 

... 
}; 


A<int> a; 
a.Set<int>(10); 

Comment faire fonctionner ? Merci beaucoup!

+2

Vous n'avez pas besoin de faire quelque chose de spécial. Utilisez simplement T: 'void Set (const T & t) {}'. T sera quel que soit le type avec lequel votre classe a été instanciée. Et utilisez-le normalement: 'A a; a.Set (10); ' – jrok

Répondre

3

Vous n'avez rien de spécial à faire. Au sein de A, T est également définie, et cela inclut la définition de Set. Donc, vous dites simplement:

template< class T > 
class A 
{ 
public: 
    void Set(const T& t) {...} 
}; 

Si vous vouliez à le modèle Set aussi bien, de sorte que différents types peuvent être utilisés avec, vous feriez:

template< class T > 
class A 
{ 
public: 
    template< typename U > void Set(const U& u) {...} 
}; 

Enfin, notez que, parfois, lors de l'appel une fonction de modèle vous n'avez pas besoin de déclarer ses arguments de modèle explicitement. Ils seront déduit du type de l'argument que vous utilisez pour les appeler. à savoir,

template< typename T > void Set(const T& t) {...} 

Set(4) // T deduced as int 
Set('0') // T deduced as char 
Set<int>('0') // T explicitly set to int, standard conversion from char to int applies 
+0

Au lieu de noms différents, c'est-à-dire T et U, j'ai donné le même nom à la fois pour T et T (à la place de U). Mais je reçois l'erreur de temps de compilation. Quelle est la raison derrière ceci. S'il vous plaît aider. – cryptomanic

2

Si vous vouliez dire des modèles membres:

template<class T> 
class A 
{ 
public: 
    template <typename U> void Set(const U& u) {...} 
}; 
Questions connexes