您的位置:首页 > 编程语言 > C语言/C++

复习 C++ 中类的函数指针

2016-01-16 00:52 393 查看
函数指针这种东西,平时工作中基本上不会用到(搬砖的怎么可能用到它呢)。

如果搬砖的在工作中也要接触到函数指针,那就说明一个问题,这套框架不好用,不成熟。

那函数指针会用在哪里咧?你猜咯~~

下面是一些基本的用法,根据消息号调到对应的函数:

#include <iostream>
#include <map>

enum MsgCode
{
MSGCODE1 = 1,
MSGCODE2 = 2,
};

class Fuck
{
public:
Fuck(int i=0):f(i){
// register functions
mapFunction[MSGCODE1] = &Fuck::method1;
mapFunction[MSGCODE2] = &Fuck::method2;
// ...
}

public:
int method1(int i);
int method2(int i);
// ...

public:
bool processMsg(int msg_code, int msg_data);

private:
int f;

private:
std::map<int, int (Fuck::*)(int i)> mapFunction;
// int (Fuck::*mapFunction[1024])(int i);
// std::map<std::string, int (Fuck::*)(int i)> mapFunction;
};

int Fuck::method1(int i)
{
return i * f;
}

int Fuck::method2(int i)
{
return i * f + 1;
}

bool Fuck::processMsg(int msg_code, int msg_data)
{
std::map<int, int (Fuck::*)(int i)>::iterator it = mapFunction.find(msg_code);
if(it == mapFunction.end())
return 0;

int result = (this->*it->second)(msg_data);
std::cout << result << std::endl;

return 1;
}

int main(int argc, char** argv)
{
Fuck fuck(1);

int msg_code = MSGCODE1;
int msg_data = 1;
fuck.processMsg(msg_code, msg_data);

msg_code = MSGCODE2;
msg_data = 1;
fuck.processMsg(msg_code, msg_data);

return 0;
}


如有其他需求,扩展一下就好。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: