Les templates en C++

Fermé
yuri648 Messages postés 677 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 20 mai 2015 - Modifié par yuri648 le 10/01/2012 à 22:34
yuri648 Messages postés 677 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 20 mai 2015 - 10 janv. 2012 à 23:04
Bonjour,


Existe-t-il un autre moyen que les templates pour appeler des objets de classes différentes mais qui implémentent une même méthode ?

pour me bien comprendre voici cet exemple

on a 2 classes logarithme et cosinus ces classes possedent les 2 une methode compute et IterateOperation prend en paramètre template une classe t_operation


template<class T>class Logarithme{
public:
void Compute(T& t){
t = log(t);
}
};
template<class T>class Cosinus{
public:
void Compute(T& t){
t = cos(t);
}
};
template<class T, class t_operation>void IterateOperation(vector<T>& v, t_operation& operation){
class vector<T>::iterator ite = v.end();
for(class vector<T>::iterator it = v.begin(); it != ite; ++ it)
operation.Compute(*it);
}

merci d'avance

2 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
10 janv. 2012 à 22:39
Tu peux faire de l'héritage.
Tu définis une classe Computable avec ta méthode Compute, puis tu fais de Logarithme et Cosinus deux classes filles, ensuite dans IterateOperation tu passes en paramètre un Computable& operation que tu pourras utiliser pour appeler Compute.
0
yuri648 Messages postés 677 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 20 mai 2015 7
10 janv. 2012 à 22:46
ah ok merci beaucoup
donc qu'elle est l'avantage d'utiliser les template en parametre?
ou bien quand est ce que on utilise les templates ou bien l'heritage?

merci
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
10 janv. 2012 à 23:02
Les templates n'ont a-priori rien à voir avec le code que tu as mis plus haut.

En fait tous tes T sont des double dans ton code puisque log, et cos prennent en paramètre des double et renvoient des double.

Les template c'est quand on veut que notre classe ou notre méthode puisse être utilisé pour des types différents. Par exemple vector pour contenir des valeurs de n'importe quel type.
Ou alors une fonction de tri qui pourrait trier n'importe quoi...

L'héritage permet de décomposer ton code en arborescence. Si dans toutes tes classes tu utilises une méthode compute, c'est qu'elles sont liées les unes aux autres par cette méthode, tu peux donc définir cette méthode "en haut de l'arbre" des classes comme je l'ai dit tout à l'heure
0
yuri648 Messages postés 677 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 20 mai 2015 7
10 janv. 2012 à 23:04
ah d'accords merci bcp
0