我们希望将一个类的成员函数封装到一个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; }
Comments | NOTHING