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!