Bob*_*Bob 3 c++ member-function-pointers function-pointers functor c++11
我正在处理由第三方API定义的事件。这些事件由字符串标识符标识,即"EventABC"
我需要将表中的这些(字符串)事件映射到对象的成员函数。
题
最安全,最干净的方法是什么?
在没有其他限制的情况下,可以使用std::map或std::unordered_map从std::string到轻松完成此操作std::function<void()>。使用C ++ 11,您可以使用lambda轻松地捕获this对象以调用成员函数。
class HandlerHandler
{
std::map<std::string, std::function<void()>> handlers;
void foo();
void bar();
void frobnicate();
HandlerHandler()
{
handlers["FOO"] = [this](){ foo(); };
handlers["BAR"] = [this](){ bar(); };
handlers["FROB"] = [this](){ frobnicate(); };
}
void handle(std::string h)
{
handlers[h]();
}
};
Run Code Online (Sandbox Code Playgroud)
您可能要防止h在映射中不存在的情况(当前,当它尝试调用默认构造的函数时,它将抛出异常)。