Appel de fonction par nom / string

Le
Thierry
Bonjour,

Je suis en train de develloper une sorte de handler SOAP, qui parse
des requete XML et repond en fonction de la methode invoquée.

Il y a une cinquantaine de méthode et je veux pouvoir invoquer la
bonne méthode sans faire 50 if (methodName == "GetTruc") { return
GetTruc(); }

Toutes les fonctions ont le même proto int GetTruc();

Une méthode serait de faire une map<string nom de fonction, pointeur
sur la fonction fonction> mais ça oblige d'avoir des méthodes
statiques et de passer une reference a this dans chacune d'elle.
Pas satisfaisait a mon gout.

Une méthode derivée serait de creer une classe friend qui exporte les
fonctions statiques avec un pointeur this en parameter et qui ferait
l'appel a la fonction.

Y'aurrait pas un moyen sioux pour appeller une méthode "par son" nom
et en passant le this je ne sais pas comment ? J'ai regardé du coté de
boost::bind sans trouver de solutions.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Pascal J. Bourguignon
Le #23773861
Thierry

Y'aurrait pas un moyen sioux pour appeller une méthode "par son" nom
et en passant le this je ne sais pas comment ? J'ai regardé du coté de
boost::bind sans trouver de solutions.



this->call("nomDeMethode");

Autrement dit, non, pas vraiment.

--
__Pascal Bourguignon__ http://www.informatimago.com/
A bad day in () is better than a good day in {}.
Alain Ketterlin
Le #23774061
Thierry
Je suis en train de develloper une sorte de handler SOAP, qui parse
des requete XML et repond en fonction de la methode invoquée.

Il y a une cinquantaine de méthode et je veux pouvoir invoquer la
bonne méthode sans faire 50 if (methodName == "GetTruc") { return
GetTruc(); }

Toutes les fonctions ont le même proto int GetTruc();

Une méthode serait de faire une map<string nom de fonction, pointeur
sur la fonction fonction> mais ça oblige d'avoir des méthodes
statiques et de passer une reference a this dans chacune d'elle.



Non ça n'oblige pas à faire des méthodes statiques, mais la syntaxe est
un peu lourde.

class X {
public:
int f() { return 0; }
int g() { return 1; }
};

void call(X & x, int (X::*member)())
{
(x.*member)();
}
int main()
{
X x;
call(x,&X::f);
}

Et tu peux donc utiliser une map pour la conversion nom -> pointeur vers
membre.

-- Alain.
Thierry
Le #23774211
On 19 sep, 13:49, Alain Ketterlin
Et tu peux donc utiliser une map pour la conversion nom -> pointeur vers
membre.



Ca marche, merci !
Publicité
Poster une réponse
Anonyme