最近有朋友问我,C++ 里怎么实现用 string 取函数,因为要实现一个 server,根据送来报文里的类型字段选择合适的函数处理。
答案是使用函数指针,或者使用 std::function 封装过的函数指针。
注意,此时要求所有函数的签名类型是一样的,包括参数和返回值,因为这样编译器才能确定函数调用时的参数入栈顺序等。
如果各个函数长的不一样,请使用switch-case语句手动调用。
#include <iostream>
#include <map>
#include <functional>
#include <string>
using namespace std;
// 二选其一
using Handler = function<int(int, int)>;
// typedef int(*Handler)(int, int);
map<string, Handler> handlers;
int add_handler(int a, int b){
return a + b;
}
int minus_handler(int a, int b){
return a - b;
}
int main(){
handlers.insert({"add", add_handler});
handlers.insert({"minus", minus_handler});
Handler h = handlers["add"];
cout << h(114, 514) << endl;
return 0;
}