Para mejorar la eficiencia de su motor de scripting, considere aprovechar un mapa STL para administrar los punteros de función. Este enfoque elimina la necesidad de declaraciones condicionales largas para invocar funciones específicas.
Para esta implementación, comience declarando el tipo de puntero de función como typedef para facilitar la lectura:
typedef void (*ScriptFunction)(void); // function pointer type
A continuación, defina un mapa_unordered_map llamado script_map con claves de cadena que representan nombres de funciones y valores de ScriptFunction para las direcciones de puntero correspondientes:
typedef std::unordered_map<:string scriptfunction> script_map;
Ejemplo de registro de función:
void some_function() {}
script_map m;
m.emplace("blah", &some_function);
Para llamar a una función, defina una función call_script:
void call_script(const std::string& pFunction) {
auto iter = m.find(pFunction);
if (iter == m.end()) {
// function not found
} else {
(*iter->second)(); // invoke the function via the pointer
}
}
Enfatice que puede generalizar el tipo ScriptFunction a std::function* lo que sea*/> para atender a algo más que simples punteros de función.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3