Maison >développement back-end >C++ >Comment appeler dynamiquement des fonctions par nom en C ?

Comment appeler dynamiquement des fonctions par nom en C ?

DDD
DDDoriginal
2024-10-26 08:46:02320parcourir

How to Dynamically Invoke Functions by Name in C  ?

Invoquer des fonctions par leur nom en C

En C, il est souvent nécessaire d'appeler des fonctions par leur nom, notamment en programmation dynamique et en code contextes de génération. Bien que l'utilisation de « if » et « else » pour différents appels de fonction soit une approche basique, elle peut devenir lourde pour un grand nombre de fonctions.

Une solution potentielle est la réflexion. Cependant, C manque de capacités de réflexion natives. Alternativement, on peut utiliser une solution de contournement en utilisant :

Une std::map de pointeurs de fonction

En créant une carte qui associe les noms de fonctions (std::strings) à pointeurs de fonction, il devient plus facile d'appeler des fonctions de manière dynamique :

<code class="cpp">#include <iostream>
#include <map>

int add(int i, int j) { return i + j; }
int sub(int i, int j) { return i - j; }

typedef int (*FnPtr)(int, int);

int main() {
    // Initialization:
    std::map<std::string, FnPtr> myMap;
    myMap["add"] = add;
    myMap["sub"] = sub;

    // Usage:
    std::string s("add");
    int res = myMap[s](2, 3);
    std::cout << res;
}</code>

Dans cette approche, la clé de chaîne "add" récupère le pointeur de fonction correspondant, qui est ensuite invoqué avec les arguments spécifiés. Cette approche permet un appel de fonction flexible en déterminant dynamiquement le nom de la fonction à appeler.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn