#include <stdio.h>
#include <Windows.h>
#include <iostream>
#include <functional>
#include <unordered_map>
using namespace std;
class Test {
public:
void Add(int a, int b);
void Delete(int c, int d);
void Mult(int c, int d);
void init();
void RunMap(int index);
private:
std::unordered_map<int, void(Test::*)(int, int)> m_FuncMaps;
std::unordered_map<int, function<void(int, int)>> m_FuncMaps2;
};
void Test::init()
{
m_FuncMaps[1] = &Test::Add;
m_FuncMaps[2] = &Test::Delete;
m_FuncMaps2[3] = bind(&Test::Mult, this, placeholders::_1, placeholders::_2); //方法2
}
void Test::Mult(int c, int d)
{
printf("is Mult");
}
void Test::Add(int a, int b)
{
printf("is Add");
}
void Test::Delete(int a, int b)
{
printf("is Delete");
}
void Test::RunMap(int index)
{
auto funcIter = m_FuncMaps.find(index);
if (funcIter != m_FuncMaps.end()) //方法1
{
(this->*funcIter->second)(1, 1);
}
auto funcIter2 = m_FuncMaps2.find(index);
if (funcIter2 != m_FuncMaps2.end()) //方法2
{
(funcIter2->second)(1, 1);
}
}
void main()
{
Test test;
test.init();
test.RunMap(1);
test.RunMap(2);
test.RunMap(3);
getchar();
}
通过map管理函数,有类似于控件绑定函数一样的效果
参考:https://blog.csdn.net/chailyuan/article/details/53524948
https://blog.csdn.net/xf_zhen/article/details/52224139
https://blog.csdn.net/mark20170902/article/details/51944182