我们希望将一个类的成员函数封装到一个map上,我们可以使用如下的做法。这里需要注意,绑定的函数他们需要有相同的返回类型,以及相同的参数列。
#include <iostream>
#include <map>
#include <string>
// 一个类
class OneClass
{
private:
// ===== 私有成员变量 =====
// using _Name_ = Func_Type(Class::*)(Parameters...)
using MFP = int(OneClass::*)(int param);
std::map<std::string, MFP> m_funcMap;
// ===== 私有成员函数 =====
int AddOne(int p)
{
return p + 1;
}
int AddTwo(int p)
{
return p + 2;
}
public:
// ===== 公有成员函数 =====
OneClass()
{
// 初始化
this->m_funcMap["AddOne"] = &OneClass::AddOne;
this->m_funcMap["AddTwo"] = &OneClass::AddTwo;
}
int CallFunction(std::string str, int p)
{
MFP fp = this->m_funcMap[str];
return (this->*fp)(p);
}
};
int main()
{
OneClass c;
std::cout << c.CallFunction("AddOne", 3) << std::endl;
std::cout << c.CallFunction("AddTwo", 3) << std::endl;
return 0;
}