Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1670 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [Probleme] Pointeurs de fonction dans une map

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Probleme] Pointeurs de fonction dans une map

n°1221642
djar
Posté le 12-10-2005 à 23:18:03  profilanswer
 

Salut à tous !
 
Voila, je voudrais associer une fonction à une chaine donnée, pour ce faire, j'utilise une map.
Voici mon code:

Code :
  1. // Pour l'association d'une fonction pour la gestion des attributs.
  2. map<const char*, void*> _assocFonctAttrib;
  3. _assocFonctAttrib["length"] = (void*)(string::length());
  4.             string s;
  5.             s.(_assocFonctAttrib["length"]);      // Appele la méthode length...


 
Ca semble bizarre hors du contexte, mais est ce que ça peut fonctionner ?
 
 
Merci à ceux qui répondront !

mood
Publicité
Posté le 12-10-2005 à 23:18:03  profilanswer
 

n°1221649
Taz
bisounours-codeur
Posté le 12-10-2005 à 23:23:47  profilanswer
 

c'est de la daube. utilise std::string, et des objets, pas des void*. Ne caste pas de fonction membre en void*. Fais une recherche sur les pointeurs de fonctions membres ?

n°1221668
djar
Posté le 12-10-2005 à 23:31:50  profilanswer
 

Ok ! Merci ! Heeeuuu ... Tu peux être un peu plus clair sur les objets ? Je veux un truc générique... C'est ce que j'éspérais avec un void...
T'as pas un exemple de code STP ?...
Sinon, j'utilise le namespace std, pas besoin de std::string alors ?


Message édité par djar le 12-10-2005 à 23:38:57
n°1222132
Taz
bisounours-codeur
Posté le 13-10-2005 à 14:41:36  profilanswer
 

???

n°1222463
jesus_chri​st
votre nouveau dieu
Posté le 13-10-2005 à 20:08:56  profilanswer
 

Code :
  1. _assocFonctAttrib["length"] = (void*)(string::length());


???
 
tu veux associer une fonction. Ok pour une fonction. Disons du type de

Code :
  1. int toto(int a, bool b);


 
définissons son type pointeur :

Code :
  1. typedef int (*FPTR)(int, bool);


 
et une map string -> pointeur de fonction :

Code :
  1. std::map<std::string, FPTR> foo;
  2. foo["toto"] = &toto;
  3. foo["titi"] = &titi;
  4. ...
  5. int n = foo["toto"](3, true);


 

n°1222469
chrisbk
-
Posté le 13-10-2005 à 20:21:16  profilanswer
 

je crains qu'il ne veuille patater des fonctions membres dans sa map, et tout et n'importe quoi comme fonction, sans proto specifique

n°1222487
jesus_chri​st
votre nouveau dieu
Posté le 13-10-2005 à 20:41:48  profilanswer
 

c'est techniquement possible à coups de void* et de cast hasardeux, mais bon là je ne lui expliquerais pas, il doit repenser son code.
 

Code :
  1. static int toto(int a, bool b);
  2. static void titi(int* p);
  3. static char tutu(double d);
  4. enum { TOTO, TITI, TUTU };
  5. template<int n>
  6. struct MapFunction {};
  7. template<>
  8. struct MapFunction<TOTO>
  9. {
  10.    typedef int (*fptr)(int, bool);
  11.    static const fptr s_ptrfun = &toto;
  12. }
  13. template<>
  14. struct MapFunction<TITI>
  15. {
  16.    typedef void (*fptr)(int*);
  17.    static const fptr s_ptrfun = &titi;
  18. }
  19. template<>
  20. struct MapFunction<TUTU>
  21. {
  22.    typedef char (*fptr)(double);
  23.    static const fptr s_ptrfun = &tutu;
  24. }
  25. // et comme ça pour chaque fonction, de toute façon t'es obliger de les
  26. // connaître à la compil, alors autant mettre ça dans un template
  27. // au lieu de
  28. _assocFonctAttrib["toto"] = &toto;
  29. _assocFonctAttrib["toto"](42, true);
  30. // tu fais
  31. MapFunction<TOTO>::s_prtfun(42, true);


 
PS : j'ai un doute, un pointeur de fonction static peut-il être utilisé comme constante entière littérale (pour le static const) ? Si non, alors ça compile pas mais de toute façon c'est crade :D

n°1222488
djar
Posté le 13-10-2005 à 20:42:00  profilanswer
 

Et oui chrisbk, c'est exactement ça ! Je suis un barbare... Mais est ce que patater n'importe quoi est-il possible ?

n°1222489
djar
Posté le 13-10-2005 à 20:42:29  profilanswer
 

On a posté en même temps ! Mille merci pour la réponse !!


Message édité par djar le 13-10-2005 à 20:44:48
n°2218904
djar
Posté le 07-02-2014 à 15:54:43  profilanswer
 


 
Utilise boost::bind djar.
 
http://fr.web.img2.acsta.net/medias/nmedia/18/35/91/26/18686482.jpg


Message édité par djar le 07-02-2014 à 15:56:44

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [Probleme] Pointeurs de fonction dans une map

 

Sujets relatifs
Fonction MySQL désapprouvépetit problème de modélisation
[C++] pbl d'appel de fonctionprobleme heritage
problème pour lecture de flux RSS avec magpierss. php?Problème LWP : impossible de télécharger la page
Probleme Visual C++probleme script news
[C++] Probleme avec la stl et les classes templates[résolu] IE 5.5 problème avec une ancre "top" dans le body
Plus de sujets relatifs à : [Probleme] Pointeurs de fonction dans une map


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR