我开发了一个具有许多内置函数的脚本引擎,因此要调用任何函数,我的代码只需进入 if .. else if .. else if
墙检查名称,但我希望开发更有效的解决方案。
我应该使用 hashmap,其中字符串作为键,指针作为值吗?我怎么能通过使用 STL 映射来做到这一点?
编辑: 我想到的另一点:当然使用映射会强制编译器不要内联函数,但我的低效方法没有因函数调用的必要性而产生任何开销,它只是执行代码。
所以我想知道函数调用产生的开销是否会比拥有 if..else
链更好。否则我可以通过在运行时检查一个字符来最小化比较次数(会更长但更快)。
最佳答案
无论你的函数签名是什么:
typedef void (*ScriptFunction)(void); // function pointer type
typedef std::unordered_map<std::string, ScriptFunction> script_map;
// ...
void some_function()
{
}
// ...
script_map m;
m.emplace("blah", &some_function);
// ...
void call_script(const std::string& pFunction)
{
auto iter = m.find(pFunction);
if (iter == m.end())
{
// not found
}
(*iter->second)();
}
请注意 ScriptFunction
类型可以概括为 std::function</* whatever*/>
所以你可以支持任何可调用的东西,而不仅仅是函数指针。
关于c++ - 使用函数指针的 STL 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2136998/