从地图C ++中的函数指针调用函数

时间:2014-11-18 00:54:25

标签: c++ visual-c++ map

所以我不确定为什么这不会工作,我尝试了一些谷歌搜索,我只是无法找出问题是什么

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

1 个答案:

答案 0 :(得分:3)

与您的信念相反,您的地图不会保留功能指针。所以你不能调用地图中的元素。

相反,您的地图包含指向成员函数的指针。非静态成员函数不是函数,不能被调用;相反,它们必须在对象上调用。您可以通过函数指针p在指针ptfm给出的对象上调用成员函数,如下所示:

(p->*ptmf)();

在您的情况下,您可能希望使用p = thisptfm = fun,因此它会:

(this->*fun)();

或者,没有局部变量:

(this->*it->second)();

在C ++ 17中,您还可以use std::invoke(it->second, this)