2010-08-23 2 views
0

Dites que j'ai une fonction f(a, b, c). Est-il possible de créer des pointeurs de fonction g et h de sorte que lorsque vous utilisez g et h, ils utilisent une valeur prédéterminée pour l'un des arguments?Pointeurs de fonction C++ et arguments de préréglage

Par exemple (*g)(b, c) serait équivalent à f(1, b, c) et (*h)(b, c) équivaudrait à appeler f(2, b, c).

La raison pour laquelle je fais cela est que j'appelle une fonction à laquelle je peux obtenir un pointeur (via dlsym) et cette fonction a un comportement radicalement différent selon le premier argument (si bien qu'ils ne devraient pas ne sois pas vraiment appelé la même chose). De plus la variable pointeur de fonction qui est utilisée dans le programme principal ne peut généralement prendre que deux arguments car c'est un cas spécial où la fonction importée a trois (mais seulement deux sont nécessaires, l'un est essentiellement un paramètre).

Merci.

+1

Ce que vous voulez est appelé currying. Regardez cette question: http://stackoverflow.com/questions/152005/how-can-currying-be-done-in-c – camh

+1

@camh: Notez que cette question a été posée il y a un certain temps. Maintenant, les réponses pointant vers 'std :: bind' (de' boost :: bind' seraient écrasantes. ':)' – sbi

Répondre

3

Je ne vois pas pourquoi vous pouvez le faire si vous avez défini les points de fonction g comme

void gfunc(int b, int c) { 
    f (1, b, c); 
} 
g = &gfunc; 

La meilleure façon de le faire en C++ est probablement en utilisant foncteurs.

+0

Il veut dire utiliser les paramètres par défaut, je suppose. – aggsol

+0

+1 pour les foncteurs. Cependant la solution de Hemal est assez simple et VolatileStorm peut avoir son h et g désirés. –

+0

@Stephane: mais la signature des pointeurs de fonction ne correspond plus. – aggsol

Questions connexes