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
Libérer: 2024-10-26 08:46:02
original
319 Les gens l'ont consulté

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal