函数指针的使用

使用函数指针可以很方便的进行流程控制

Posted by 雯饰太一 on May 28, 2023

函数指针的使用

动态选择函数

1
2
3
4
//根据不同的mode,来调用不同的类成员函数
void(TestCls:: * addTarget)() = nullptr;
addTarget = (addTarget) ? addTarget : (mode == ENUM_A) ? &TestCls::AddTargetFun1 : nullptr;
addTarget = (addTarget) ? addTarget : (mode == ENUM_B) ? &TestCls::AddTargetFun2 : nullptr;

使用函数映射表,减少if…else…语句

1
2
3
4
5
6
7
8
9
10
//构建之前,必须有函数指针的定义才行
typedef void (DataHandleThread::*pf)(Json::Value&);
QMap<QString,pf> m_parseFunMap;//建立根据名称查找执行函数的map
void DataHandleThread::ConfigFunMap()
{
	//备注:以下反射的建立与使用,只是初级
	m_parseFunMap["beart_jump"]         = &DataHandleThread::beart_jump_response_parse;
	m_parseFunMap["realtime_target"]    = &DataHandleThread::realtime_target_parse;
	m_parseFunMap["get_current_target"] = &DataHandleThread::realtime_target_parse;
}

相关问题

类的前向声明如下:

1
2
3
4
5
6
7
//无命名空间的写法
class ClsA;

//有命名空间的写法
namespace nsp{
    class ClsB;
}

使用容器之前,通常需要前向生命一下才行,且classstruct不能混用。