简单说明
- 类中函数指针声明, e.g.
using pFunc = void (ClassName::*)();
- 将函数指针保存到对应的容器中去 e.g.
map[key] = &ClassName::funcName
- 调用对应的函数 e.g.
(this->*pFunc)()
示例
#ifndef PFUNCDEMO_H
#define PFUNCDEMO_H
#include <unordered_map>
#include <iostream>
namespace T16_NS {
using namespace std;
// 限定作用域的枚举
enum class OperType
{
OPER_TYPE_1,
OPER_TYPE_2,
};
class Hello
{
// 声明函数指针别名, 注意需要 类名::
using workFunc = void (Hello::*)();
public:
Hello() {
// 初始化函数指针
m_workMap[OperType::OPER_TYPE_1] = &Hello::dowork1;
m_workMap[OperType::OPER_TYPE_2] = &Hello::dowork2;
}
public:
void dowork(const OperType &key) {
auto it = m_workMap.find(key);
if (it == m_workMap.end())
{
return;
}
// 调用对应函数, 注意 需要this->*去调用
(this->*(it->second))();
}
private:
void dowork1() { cout << "....dowork1....\n"; }
void dowork2() { cout << "....dowork2....\n"; }
private:
unordered_map<OperType, workFunc> m_workMap;
};
void test()
{
Hello hello;
hello.dowork(OperType::OPER_TYPE_2);
hello.dowork(OperType::OPER_TYPE_1);
}
} // T16_NS
网友评论