[newbie] Pointeur sur fonction membre sans connaître sa classe

Le
TSalm
Bonjour,

Est-il possible de créer des fonctions prenant en paramétre un
pointeur sur une fonction membre sans connaître la classe de cette
fonction membre ?
Evidemment, la signature de la fonction membre pointée reste la même.

D'avance merci,
TSalm
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
Nicolas Deslandes
Le #310237
En utilisant une fonction template c'est possible. Voici un petit exemple:

#include <iostream>
#include <string>

using namespace std;

class A
{
public:
size_t f(const string& s ) { return s.size(); }
};

template<class T>
size_t apply(size_t (T::*pf)(const string&), const string& str)
{
T a;
return (a.*pf)(str);
}

int main()
{
cout << "Returned: " << apply(&A::f, "Hello!") << endl;
}


Ici la fonction apply peut s'appliquer a n'importe quelle classe.

--
Nicolas

"TSalm" news:
Bonjour,

Est-il possible de créer des fonctions prenant en paramétre un
pointeur sur une fonction membre sans connaître la classe de cette
fonction membre ?
Evidemment, la signature de la fonction membre pointée reste la même.

D'avance merci,
TSalm


TSalm
Le #310736
Il faut vraiment que je me mettes aux templates.
Merci

Le Sat, 04 Aug 2007 23:25:19 GMT, "Nicolas Deslandes"

En utilisant une fonction template c'est possible. Voici un petit exemple:

#include <iostream>
#include <string>

using namespace std;

class A
{
public:
size_t f(const string& s ) { return s.size(); }
};

template<class T>
size_t apply(size_t (T::*pf)(const string&), const string& str)
{
T a;
return (a.*pf)(str);
}

int main()
{
cout << "Returned: " << apply(&A::f, "Hello!") << endl;
}


Ici la fonction apply peut s'appliquer a n'importe quelle classe.


Publicité
Poster une réponse
Anonyme