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