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>
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!