Maison > développement back-end > C++ > le corps du texte

Comment puis-je appeler des fonctions par nom (stockées dans un std::string) en C ?

Patricia Arquette
Libérer: 2024-10-26 07:04:31
original
938 Les gens l'ont consulté

How Can I Call Functions by Name (Stored in a std::string) in C  ?

Appel de fonctions par nom (std::string) en C

En C , on ne peut pas appeler directement une fonction par son nom stocké dans un chaîne. Cependant, des solutions de contournement existent pour obtenir cette fonctionnalité.

Approche de base

L'approche de base implique l'utilisation d'une série d'instructions « if-else » ou d'un « switch-case » construct, vérifiant explicitement le nom de la fonction stocké dans la chaîne et appelant la fonction correspondante. Comme le démontre l'extrait de code fourni, cette méthode nécessite de gérer manuellement une liste de fonctions et leurs noms.

Réflexion

L'approche suggérée dans la question est appelée la réflexion, qui implique l'accès dynamique et la manipulation des éléments du programme au moment de l'exécution. Bien que la réflexion ne soit pas nativement prise en charge en C, certaines bibliothèques offrent des capacités de réflexion limitées.

Solution de contournement en utilisant std::map

Une solution de contournement consiste à créer un std::map qui associe les noms de fonctions (clés std::string) aux pointeurs de fonction (valeurs int (*FnPtr)(int, int)). Cela permet une récupération et un appel efficaces des fonctions en fonction de leurs noms.

L'extrait de code fourni illustre cette approche :

<code class="c++">#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() {
    std::map<std::string, FnPtr> myMap;
    myMap["add"] = add;
    myMap["sub"] = sub;

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

Dans cet exemple, myMap[s](2, 3 ) l'expression récupère le pointeur de fonction associé à la chaîne "add" et l'invoque avec les arguments 2 et 3, ce qui donne une sortie de 5.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!