C++ 将成员函数映射到map上

发布于 2021-06-28  58 次阅读


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