函数指针这种东西,平时工作中基本上不会用到。
那函数指针会用在哪里?
下面是一些基本的用法,根据消息号调到对应的函数:
1 #include <iostream>
2 #include <map>
3
4 enum MsgCode
5 {
6 MSGCODE1 = 1,
7 MSGCODE2 = 2,
8 };
9
10 class Fuck
11 {
12 public:
13 Fuck(int i=0):f(i){
14 // register functions
15 mapFunction[MSGCODE1] = &Fuck::method1;
16 mapFunction[MSGCODE2] = &Fuck::method2;
17 // ...
18 }
19
20 public:
21 int method1(int i);
22 int method2(int i);
23 // ...
24
25 public:
26 bool processMsg(int msg_code, int msg_data);
27
28 private:
29 int f;
30
31 private:
32 std::map<int, int (Fuck::*)(int i)> mapFunction;
33 // int (Fuck::*mapFunction[1024])(int i);
34 // std::map<std::string, int (Fuck::*)(int i)> mapFunction;
35 };
36
37 int Fuck::method1(int i)
38 {
39 return i * f;
40 }
41
42 int Fuck::method2(int i)
43 {
44 return i * f + 1;
45 }
46
47 bool Fuck::processMsg(int msg_code, int msg_data)
48 {
49 std::map<int, int (Fuck::*)(int i)>::iterator it = mapFunction.find(msg_code);
50 if(it == mapFunction.end())
51 return 0;
52
53 int result = (this->*it->second)(msg_data);
54 std::cout << result << std::endl;
55
56 return 1;
57 }
58
59 int main(int argc, char** argv)
60 {
61 Fuck fuck(1);
62
63 int msg_code = MSGCODE1;
64 int msg_data = 1;
65 fuck.processMsg(msg_code, msg_data);
66
67 msg_code = MSGCODE2;
68 msg_data = 1;
69 fuck.processMsg(msg_code, msg_data);
70
71 return 0;
72 }
如有其他需求,扩展一下就好。。