Stocker des pointeurs de fonction
Celui-ci utilise un simple pointeur de fonction, mais que si je veux stocker que de pointeur de fonction? Dans ce cas, quelle serait la déclaration de la variable?
#include <iostream>
#include <vector>
using namespace std;
double operation(double (*functocall)(double), double wsum);
double get_unipolar(double);
double get_bipolar(double);
int main()
{
double k = operation(get_bipolar, 2); //how to store get_bipolar?
cout << k;
return 0;
}
double operation(double (*functocall)(double), double wsum)
{
double g = (*functocall)(wsum);
return g;
}
double get_unipolar(double wsum)
{
double threshold = 3;
if (wsum > threshold)
return threshold;
else
return threshold;
}
double get_bipolar(double wsum)
{
double threshold = 4;
if (wsum > threshold)
return threshold;
else
return threshold;
}
OriginalL'auteur Ismail Marmoush | 2010-02-10
Vous devez vous connecter pour publier un commentaire.
Vous code est presque déjà fait, vous semblez appeler de façon incorrecte, il devrait être tout simplement
Si vous voulez avoir une variable, il est déclaré dans la même manière
ou quand déjà déclaré
vous donne une variable appelée
functocall2
qui est de référencement get_bipolar, en l'appelant simplement en faisantou de le transmettre à l'opération par
j'ai déclaré la functocall2 dans le fichier d'en-tête , comment l'attribuer à un fichier cpp ????????????
Simplement
functocall2 = get_bipolar;
tout comme toute autre affectation.OriginalL'auteur falstro
Vous déjà (presque) dans votre code:
Ceci définit un pointeur de fonction nommée
functocall
qui points àget_bipolar
.... = get_bipolar;
sans&
?comme ceci? double (*functocall)(double) = &get_bipolar; k=opération(???,2); // alors quoi mettre ici ??
En utilisant le & est certainement permis et généralement préféré par les personnes dans le "explicite est mieux qu'implicite" camp
êtes-vous sûr de cela, il se sent comme les fonctions sont, de par leur définition même des pointeurs (pour le code) déjà.
Peut-être que vous devriez mettre des crochets dans les #includes ?
OriginalL'auteur Péter Török
OriginalL'auteur pierrotlefou
qui jamais vous êtes à l'aise à utiliser.
oui certainement ,vous avez raison. Je suis en train de corriger.
OriginalL'auteur Ashish
Ont un look à la fonction "boost", c'est un en-tête seule bibliothèque qui remet de l'ordre dans les choses un peu (à mon humble avis):
http://www.boost.org/doc/libs/1_42_0/doc/html/function.html
(NB: les différentes syntaxe requise pour VC6)
Il y a des avantages et des inconvénients à la fonction "boost". La surcharge est susceptible d'être négligeable dans le cas des OP de cas d'utilisation, l'avantage est dans le code plus propre et une plus grande évolutivité. Semblait utile de mentionner dans un forum comme celui-ci afin que les lecteurs puissent voir ce qui est disponible.
OriginalL'auteur Patrick
où
foo
est le nom de la variable.OriginalL'auteur Vebjorn Ljosa
Vous devriez envisager d'utiliser un typedef:
Mai je recommande également le modèle d'identité astuce:
OriginalL'auteur Manuel