Invocation de fonction efficace avec la carte STL
Pour améliorer l'efficacité des appels de fonction dans votre moteur de script, l'utilisation d'une carte STL offre une solution viable . Contrairement aux approches précédentes qui reposaient sur des chaînes if-else, une carte fournit une méthode plus rapide et plus structurée.
Pour implémenter cela à l'aide d'une carte STL, vous pouvez définir un alias de type pour le pointeur de fonction, tel que ScriptFunction, et créez une carte script_map avec des clés sous forme de chaînes représentant les noms de fonctions et des valeurs sous forme de pointeurs vers les fonctions correspondantes.
Voici un exemple :
<code class="cpp">typedef void (*ScriptFunction)(void); // function pointer type typedef std::unordered_map<std::string, ScriptFunction> script_map;</code>
Une fois la carte remplie avec vos fonctions enregistrées, vous pouvez invoquer une fonction en passant son nom sous forme de chaîne à la fonction call_script :
<code class="cpp">void call_script(const std::string& pFunction) { auto iter = m.find(pFunction); if (iter == m.end()) { // not found } (*iter->second)(); }</code>
Bien que cette approche introduit une certaine surcharge due aux appels de fonction, le gain de performances en évitant les longues chaînes if-else est probable pour dépasser le coût. Alternativement, vous pouvez envisager de minimiser les comparaisons en vérifiant un caractère au moment de l'exécution, mais cela peut entraîner une exécution plus lente.
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!