Comment pointeurs de fonction struct membre utile en C?
Je ne suis pas nouvelle à la programmation en C. Mais je ne comprends pas quelle est l'utilité de garder le pointeur de fonction en tant que membre de structure en C. par exemple,
//Fist Way: To keep pointer to function in struct
struct newtype{
int a;
char c;
int (*f)(struct newtype*);
} var;
int fun(struct newtype* v){
return v->a;
}
//Second way: Simple
struct newtype2{
int a;
char c;
} var2;
int fun2(struct newtype2* v){
return v->a;
}
int main(){
//Fist: Require two steps
var.f=fun;
var.f(&var);
//Second : simple to call
fun2(&var2);
}
Ne programmeurs de l'utiliser pour donner Orientée Objet(OO), forme pour il code C et de fournir de l'objet abstrait? Ou le code aspect technique.
Je pense que, dans le code ci-dessus la deuxième façon est plus doux et assez simple aussi. Dans fist façon, il nous reste à passer &var
, même fun()
est membre de la struct.
Si son bon de garder le pointeur de fonction au sein de structure de définition, de bien vouloir nous aider à expliquer la raison.
Pensez à des fonctions virtuelles en C++ classes. Ils sont mis en œuvre dans un mode similaire sous le capot.
Concernant les pointeurs de fonction dans les systèmes embarqués.
Merci @Lundin! vraiment très intéressants et utiles sur la réponse que j'y ai trouvés.
Concernant les pointeurs de fonction dans les systèmes embarqués.
Merci @Lundin! vraiment très intéressants et utiles sur la réponse que j'y ai trouvés.
OriginalL'auteur Grijesh Chauhan | 2012-10-19
Vous devez vous connecter pour publier un commentaire.
Fournir un pointeur de fonction sur une structure peut vous permettre de choisir de manière dynamique la fonction à effectuer sur une structure.
Cela vous donne la possibilité d'avoir une seule interface d'appel, mais l'appel de deux fonctions différentes en fonction de si votre test est valide ou pas.
OriginalL'auteur tomahh
Utile si vous essayez de faire une sorte de "objet" basée sur la programmation.
Si vous avez déjà vu le moteur de Quake 3 du code source.. vous pouvez voir clairement que la plupart des "entités" ont des caractéristiques qui les définissent, et le travail qu'ils font[qui sont les pointeurs de fonction].
La ségrégation des attributs et des fonctions(par le biais de pointeurs de fonction en C) définit un "struct" attributs de l'objet et les actions qu'ils peuvent faire.
Par exemple:
OriginalL'auteur Aniket Inge
J'ai utilisé dans le passé pour mettre en œuvre générique récipients1 en C.
Par exemple:
La structure de la liste elle-même est de données agnostiques, à l'aide de
void *
pour représenter les éléments de données, et les délégués de tous les types de courant des opérations pour les fonctions indiquées par les pointeurs ci-dessus:1. Pour convenablement lâche définitions de "générique" et "conteneur"
OriginalL'auteur John Bode
Cela peut être particulièrement utile dans les systèmes embarqués, ou le pilote de l'écriture.
Les fonctions sont appelées à l'aide des pointeurs de fonction.
par exemple
etc
OriginalL'auteur anishsane
Parfois en C, vous devez appeler une fonction, sans le savoir sa mise en œuvre dès le départ. E. g. si vous êtes à l'élaboration d'une bibliothèque autonome utilisé dans différents projets. Dans ce cas, il est parfaitement logique pour ajouter un pointeur de fonction à un contexte struct et passer le long de la bibliothèque de fonctions. Les fonctions de la bibliothèque peut alors appeler votre fonction au moment de l'exécution, sans avoir à inclure les fichiers d'en-tête qui la définissent.
Il est en effet similaire à ce que vous faites lorsque vous faites de la programmation Orientée Objet. En C, vous passez habituellement autour de variables de contexte, par exemple, une structure regroupant un ensemble de variables et, éventuellement, des fonctions qui sont importantes pour ce contexte. Il est proche de la eqvuivalent dans la programmation orientée-objet, où vous instancier une classe et de définir les variables de l'instance.
OriginalL'auteur Stragulus
Voici un projet pour aider à expliquer l'utilité des pointeurs de fonction. Essayez de créer un c-bibliothèque en fournissant l'héritage et le polymorphisme. Ou, d'essayer de recréer "C with Classes". Pointeurs de fonction à l'intérieur de structures vitales. http://www.cs.rit.edu/~ats/livres/ooc.pdf
OriginalL'auteur Jonathan Henson