13 class FunctionRegister;
14 typedef int (FunctionRegister::*FRP)(map<string, string> &);
15
16 class FunctionRegister {
17 public:
18 // write functions here
19 static int parseTime(map<string, string> &slots);
20 public:
21 static FunctionRegister *getInstance() {
22 return &_instance;
23 }
24 FRP getPatternFunction(const string &pat) {
25 if (_function_map.find(pat) != _function_map.end()) {
26 return _function_map[pat];
27 }
28
29 DEBUG_LOG("no function registered for [%s]", pat.c_str());
30 return NULL;
31 }
32 private:
33 map<string, FRP> _function_map;
34 static FunctionRegister _instance;
35 private:
36 FunctionRegister() {
37 // register functions here
38 _function_map["parseTime"] = FunctionRegister::parseTime;
39 }
40 ~FunctionRegister() {}
41 };
编译此代码时出现编译错误。我尝试将FunctionRegister::parseTime
更改为&FunctionRegister::parseTime
,但遇到相同的错误。
include/function_register.h: In constructor 'Instruction::FunctionRegister::FunctionRegister()':
include/function_register.h:38:36: error: cannot convert 'int(std::map<std::basic_string<char>, std::basic_string<char> >&)' to 'std::map<std::basic_string<char>, int (Instruction::FunctionRegister::*)(std::map<std::basic_string<char>, std::basic_string<char> >&)>::mapped_type {aka int (Instruction::FunctionRegister::*)(std::map<std::basic_string<char>, std::basic_string<char> >&)}' in assignment
_function_map["parseTime"] = FunctionRegister::parseTime;