Problème avec les 'keys' d'un map de la STL - C++ - Programmation
Marsh Posté le 17-03-2004 à 17:01:07
Ummon a écrit : |
si
sinon je vois ton problème. on touche la une prochaine fonctionnalité du C++ (multimethode).
avant de répondre : que doit il se passer si on compare 2 objets de types différents ?
Marsh Posté le 17-03-2004 à 17:09:22
En fait un objet index porte sur le même type (par exemple int) qui représente un champs de ma table mais une table peut contenir plusieurs index, par exemple un pour un champs int et un pour un champs char (comme dans mon code-exemple).
Je n'ai pas envie de faire un type index pour chaque type de base (int, char, etc.) car mon but final et de généraliser et de mettre les index dans un vecteur, si il y a plusieurs type d'index alors cela posera problème.
Marsh Posté le 17-03-2004 à 17:27:59
comment j'aurais traiter le problème avec le C++ actuel.
j'y vais un pue bourrin en laissant l'exception passé, on pourrait très bien,
1) tenter le cast
2) tenter une conversion (avec un constructeur / operator Type)
Code :
|
sinon j'ai toujours pas tout compris, je vois pas trop le problème à utiliser des index de types différents.
pusique que tes index sont du meme types, pourquoi tu utilises pas les template alors ?
Marsh Posté le 17-03-2004 à 17:44:10
Je voudrai eviter le cast dynamique.
Ce que j'appel des index différents ca serait :
Code :
|
Mais maintenant si je veux mettre mes index dans un 'vector' bein c'est plus trop possible puisqu'ils sont de type différent.
j'aurais voulu faire ça par la suite :
Code :
|
Marsh Posté le 17-03-2004 à 18:09:02
ben fais le !
il faut juste que planque un peu le truc : tes classes Index on besoin d'avoir une base commume.
donc tu fais une class (abstraite?), tes classes index en hérite, et pouf, vector<Index*> et c'est gagné
Marsh Posté le 17-03-2004 à 18:19:38
ouais c'était un peu ma solution de secours, je voulais eviter d'écrire du code supplémentaire
Marsh Posté le 17-03-2004 à 18:25:57
cai pas une solution de secours. tu veux du polymorphisme ? ben fais en
Marsh Posté le 17-03-2004 à 16:37:24
J'aimerai utiliser un type polymorphique dont chaque sous-type possède son propre opérateur < (operator< ) comme 'key' d'un map.
Mais le problème c'est qu'on ne peut pas donner de type pointeur comme 'key' (map<KeyType*, ...> ) donc mon 'key' que je donnerai lors d'une recherche (m[key]) sera automatiquement casté vers son parent 'KeyType' et donc c'est l'opérateur < du parent qui sera appellé.
J'aimerai utiliser cela pour créer des index (map) sur une table contenant des enregistrements et le but est que l'index puisse s'appliquer à différents type (int, long, str, etc..).
voila mon code :
Fichier 'main.cpp'
Fichier 'baseType.h' (je n'ai écrit le code que pour les type int et char)
Fichier baseType.cpp
Je précise que mon code est compilable mais affiche :
plus petit BaseType
plus petit BaseType
plus petit BaseType
plus petit BaseType
plus petit BaseType
plus petit BaseType
Mon but serait qu'il utilise les opérateurs < des classes enfants, si vous avez une solution n'hésitez pas (même si elle n'a plus rien a voir avec ce que j'ai fait) !
Message édité par Ummon le 17-03-2004 à 18:30:24