我正在使用 Winsock2 编写服务器。接收到的所有数据都是字符串形式。我有一个字符串解析器,它可以从以字符串形式给出的方法签名中提取方法名称和参数。因此 AddNewMember(arg1,arg2) 被拆分为一个名为 signature 的字符串,其中包含 AddNewMember 和一个包含 arg1 和 arg2 元素的字符串向量。这工作正常。为了使这些消息有意义,我有一个字符串到成员函数指针的映射,所有函数都采用相同的参数向量 args。这是我的 ServerControl 课程中的地图:
//from header
map<string, string (ServerControl::*)(vector<string>)> functionMap;
//this on init creates all entries to function map
functionMap["AddNewMember"] = &ServerControl::AddNewMemberFunc;
functionMap["GetMember"] = &ServerControl::GetMemberFunc;
functionMap["RemoveMember"] = &ServerControl::RemoveMemberFunc;
...etc
然后,一旦传入的消息被解析成它的部分,下面的代码就会访问映射以获取成员函数指针。
if (functionMap.find( signature ) != functionMap.end())
{
return (this->*functionMap[message])(arguments);
}
再次,签名部分是“AddNewMethod”,参数是在 () 之间传递的参数向量。
如果参数向量为空,这将按预期工作,但即使一旦将参数添加到向量中,当代码到达此行并尝试调用成员函数时,我都会遇到内存访问冲突。我试过这个,参数是 avector<string>*
和普通的vector<string>
。我很困惑。
我才真正开始在这个项目上使用函数指针,所以我不是专业人士。任何帮助将不胜感激!谢谢