所以我不确定为什么这不会工作,我尝试了一些谷歌搜索,我只是无法找出问题是什么
void Player::Cmd(std::vector<std::string> &tokens)
{
std::string str = tokens[0];
std::map<std::string, void (Player::*)()>::iterator it = playerCommands.find(str);
Func fun;
if (it != playerCommands.end())
{
fun = it->second; //i tried it->second(); same issue
fun(); //error C2064: term does not evaluate to a
//function taking 0 arguments
}
else
{
std::cout << "What? \n";
}
}
项目的git hub https://github.com/lordkuragari/TextRPG
答案 0 :(得分:3)
与您的信念相反,您的地图不会保留功能指针。所以你不能调用地图中的元素。
相反,您的地图包含指向成员函数的指针。非静态成员函数不是函数,不能被调用;相反,它们必须在对象上调用。您可以通过函数指针p
在指针ptfm
给出的对象上调用成员函数,如下所示:
(p->*ptmf)();
在您的情况下,您可能希望使用p = this
和ptfm = fun
,因此它会:
(this->*fun)();
或者,没有局部变量:
(this->*it->second)();
在C ++ 17中,您还可以use std::invoke(it->second, this)
。