Introduction :
Dans le monde du développement logiciel, un appel de fonction efficace est crucial pour maximiser les performances. Lorsqu'il s'agit de nombreuses fonctions intégrées dans un moteur de script, la vérification aveugle des noms de fonctions via une échelle if-else peut entraîner des surcharges inutiles.
Exploiter une carte STL :
Pour améliorer l'efficacité, envisagez d'utiliser une carte STL pour stocker les pointeurs de fonction avec les chaînes correspondantes sous forme de clés. Cette approche permet un appel de fonction rapide et direct plutôt que de parcourir une chaîne de conditions. Voici comment vous pouvez l'implémenter :
<code class="cpp">typedef void (*ScriptFunction)(void); typedef std::unordered_map<std::string, ScriptFunction> script_map;</code>
Définition du type de pointeur de fonction :
Ceci déclare un alias de type ScriptFunction pour représenter des pointeurs de fonction qui ne prennent aucun argument et renvoient void .
Remplir la carte :
<code class="cpp">void some_function() { } ... script_map m; m.emplace("blah", &some_function);</code>
Ici, nous définissons une fonction some_function() et l'ajoutons à la carte, en associant son nom "blah" au clé.
Invocation de fonction :
<code class="cpp">void call_script(const std::string& pFunction) { auto iter = m.find(pFunction); if (iter == m.end()) { // not found } (*iter->second)(); }</code>
Dans cette fonction, nous recherchons sur la carte le nom de la fonction fourni et, s'il est trouvé, l'exécutons directement via la fonction pointeur stocké dans la carte.
Conclusion :
L'utilisation d'une carte STL pour gérer les pointeurs de fonction offre des gains d'efficacité significatifs par rapport aux instructions if-else traditionnelles. Il permet un appel rapide de fonction en référençant directement le pointeur de fonction stocké, éliminant ainsi les frais généraux de vérification des conditions.
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!