Bonjour a tous !
Bon, j'ai un petit soucis de compréhension je pense... J'ai lu toutes les aides et tuto possible mais je n'ai pas trouvé ma réponse.
Pour un projet perso, je suis en train de recoder une liste chainée générique. Mon problème est le suivant :
J'utilise une structure :
J'ai une fonction "find" qui permet de me placer sur un élément passé en paramètre :Code:
1
2
3
4
5
6
7
8 template <typename T> struct listC { listC * prev; T v; listC * next; };
(eListErr est un enum d'erreur...) La fonction find appel l'opérateur != qui doit etre surchargé pour le type T.Code:eListErr find (T &t);
Jusque là tout va bien ! Ca marche très bien avec des int, des float, et touti quanti... Evidement, ca ne fonctionne pas pour les char * mais ca c'est normal... Le problème, c'est que je ne peux pas spécialiser mes template pour chaque classe que je vais utiliser... Or, dans mon cas, j'utilise une classe "Node" (qui représentent les noeuds d'un graph lui meme template aussi mais ca c'est pas un problème) J'instancie donc comme suit (je vous passe les templates du node pour plus de clareté...) :
Tout va bien... Sauf quand je fais un find... evidement, comme mon T est "Node *", il compare les adresses... Du coup ca fait pas ce qu'il faut... (l'opérateur != est évidement surchargé pour Node...)Code:TempList<Node *> *nodeList = new TempList<Node *>
L'astuce c'est que je ne veux pas lui mettre T=Node parce que j'ai plusieurs listes de noeuds et voudrais éviter les redondances... et si je met "T *v" dans la structure de base, c'est la meme chose... Je vais devoir faire l'allocation en interne et donc réallouer chaque noeud autant de fois qu'ils apparaissent dans une liste... S'il n'y a pas de solution, je ferais comme ca, tant pis pour la mémoire...
Merci d'avance si vous avez des idées !
Apo`