J'ai unordered_map de fonctions qui devraient être appelées sur un objet lors de l'analyse d'un fichier XML.
J'ai trouvé que boost :: function a une classe de base nommée boost :: function_base, mais comme prévu, je ne peux pas l'appeler parce que je n'ai pas la signuture de la fonction.
Puisque toutes ces fonctions sont des fonctions de réglage, je peux garantir qu'elles renvoient void et n'ont qu'un seul paramètre de type inconnu.
Y at-il une meilleure façon de résoudre le type autre qu'une branche if-else-if que j'essaie d'éviter?Appel d'une fonction boost :: function via boost :: function_base
1
A
Répondre
2
Utilisez boost :: variant est la meilleure solution. Comment pourriez-vous invoquer une fonction avec un type de paramètre inconnu, de toute façon?
0
boost::function
est conçu pour le polymorphisme de compilation seulement. Pourquoi n'utilisez-vous pas simplement un pointeur de fonction régulier? C'est à dire.
typedef void (*function_type)(void *);
Questions connexes
- 1. Boost bind function
- 2. Passe boost :: signal comme boost :: function
- 3. Boost :: lie une méthode avec boost :: function parameter
- 4. Appel Boost de Ruby via SWIG?
- 5. Fonction appel convention avec boost :: function_types
- 6. Fonction de membre de classe comme rappel utilisant boost :: bind et boost :: function
- 7. Comment sont liés les Boost Bind, les Boost Function, les Boost Signals et les pointeurs de fonction C++?
- 8. comment boost :: fonction et boost :: bind travail
- 9. boost :: function & boost :: lambda - invocation du site d'appel et accès _1 et _2 comme type
- 10. boost fonction d'usine shared_ptr
- 11. Appel de fonction virtuelle C++ versus boost :: appel de fonction speedwise
- 12. Boost shared_ptr use_count fonction
- 13. boost :: function et boost :: bind sont cool, mais qu'est ce qui est vraiment cool à propos de boost :: lambda?
- 14. Les tests Intellisense boost :: boost :: boost :: boost :: boost :: boost :: classname ....... pourquoi?
- 15. Boost erreur de compilation
- 16. boost :: sérialisation de boost :: unordered_map
- 17. boost :: utilisation de la mémoire de fonction
- 18. Création d'événements de multidiffusion avec std :: tr1 :: function (ou boost :: function)
- 19. Problèmes concernant Boost :: Python et Boost :: Threads
- 20. boost :: performance d'exécution de la fonction
- 21. boost :: handshake asio via un proxy http?
- 22. Problèmes avec boost :: ptr_vector et boost :: tout
- 23. boost :: l'expression lambda ne compile pas
- 24. boost :: fonction et des pointeurs de fonction simples: surcharge ambigous
- 25. Boost: comment construire Boost sous MacOSX
- 26. Révéler boost :: scoped_ptr en boost :: python
- 27. Aide bind boost/fonctions
- 28. boost threadpool
- 29. Noob boost :: bind membre fonction callback question
- 30. Comment créer une fonction boost :: lambda simple?
+1 Je seconde cela. Une variante sait quel type est stocké, donc il peut éviter la branche if-else-if. –
@Johannes Schaub - litb: Mais alors, comment puis-je appeler la fonction? J'ai encore besoin de savoir le type que je suis en train de résoudre. –
@the_drow se penche sur les visites. Le manuel boost.variant contient des informations à ce sujet. –