Para aumentar a eficiência de seu mecanismo de script, considere aproveitar um mapa STL para gerenciar ponteiros de função. Essa abordagem elimina a necessidade de instruções condicionais longas para invocar funções específicas.
Para esta implementação, comece declarando o tipo de ponteiro de função como um typedef para facilitar a leitura:
typedef void (*ScriptFunction)(void); // function pointer type
Em seguida, defina um unordered_map chamado script_map com chaves de string representando nomes de funções e valores ScriptFunction para os endereços de ponteiro correspondentes:
typedef std::unordered_map<:string scriptfunction> script_map;
Exemplo de função registro:
void some_function() {}
script_map m;
m.emplace("blah", &some_function);
Para chamar uma função, defina uma função 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
}
}
Enfatize que você pode generalizar o tipo ScriptFunction para std::function* qualquer*/> para atender a mais do que apenas ponteiros de função simples.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3