"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como você pode melhorar a eficiência do mecanismo de script com mapas STL para gerenciamento de ponteiro de função?

Como você pode melhorar a eficiência do mecanismo de script com mapas STL para gerenciamento de ponteiro de função?

Publicado em 2024-11-03
Navegar:273

How Can You Improve Scripting Engine Efficiency with STL Maps for Function Pointer Management?

Incorporando mapa STL em um mecanismo de script para armazenamento de ponteiro de função

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.

Tutorial mais recente Mais>

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