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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
template <typename T>
struct listC
{
  listC * prev;
  T v;
  listC * next;
};
J'ai une fonction "find" qui permet de me placer sur un élément passé en paramètre : (eListErr est un enum d'erreur...) La fonction find appel l'opérateur != qui doit etre surchargé pour le type 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é...) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
TempList<Node *> *nodeList = new TempList<Node *>
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...)

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`