问题场景
有一个task接口类,存在一个对task操作的op_proxy静态函数,task可能有多种不同类型的操作,现在要实现这个op_proxy,原型为:
int op_proxy(const std::string &task_id, const std::string &op_type);
if else之类的太“俗”了,想通过一种更为优雅的方式来实现,有什么方法?
解决方法
一般来说可以这么做,在task接口类中新增一个静态的map程序变量op_list,来保存操作类型和操作函数之间的映射,类似这样:
#ifndef _TASK_INTERFACE_H_
#define _TASK_INTERFACE_H_
#include <string>
#include <map>
typedef int (*OpFun)(const std::string &);
class TaskInterface
{
public:
static int op_proxy(const std::string &task_id, const std::string &op_type);
public:
static std::map<std::string, OpFun> _op_list;
};
#endif //_TASK_INTERFACE_H_
那么,问题来了:这个静态的map成员如何初始化?
尝试一
初始化map的问题在于要给map附一个初始值,可是map的默认构造中不能像数组一样直接赋值:
int