«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как можно повысить эффективность механизма сценариев с помощью карт STL для управления указателями функций?

Как можно повысить эффективность механизма сценариев с помощью карт STL для управления указателями функций?

Опубликовано 3 ноября 2024 г.
Просматривать:678

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

Включение карты STL в обработчик сценариев для хранения указателей функций.

Чтобы повысить эффективность обработчика сценариев, рассмотрите возможность использования карты STL для управления указателями функций. Этот подход устраняет необходимость в длинных условных операторах для вызова определенных функций.

Для этой реализации начните с объявления типа указателя функции как typedef для удобства чтения:

typedef void (*ScriptFunction)(void); // function pointer type

Далее определите unordered_map с именем script_map со строковыми ключами, представляющими имена функций и значения ScriptFunction для соответствующих адресов указателя:

typedef std::unordered_map<:string scriptfunction> script_map;

Пример регистрации функции:

void some_function() {}
script_map m;
m.emplace("blah", &some_function);

Чтобы вызвать функцию, определите функцию 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
  }
}

Подчеркните, что вы можете обобщить тип ScriptFunction до std::function*whatever*/>, чтобы обслуживать больше, чем просто указатели на функции.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3