2010-09-12 3 views
1

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

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

+1 Je seconde cela. Une variante sait quel type est stocké, donc il peut éviter la branche if-else-if. –

+0

@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. –

+0

@the_drow se penche sur les visites. Le manuel boost.variant contient des informations à ce sujet. –

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