我试图call_function使用一个字符串参数,并调用与该映射中的字符串相对应的函数,但出现错误。我该如何解决?为什么不起作用?
#include <iostream>
#include <unordered_map>
using namespace std;
class xyz {
public:
unordered_map< std::string, void(xyz::*)()> arr{
{ "user", &xyz::func_user},
{ "pwd", &xyz::func_pwd},
{ "dir", &xyz::func_dir}
};
void call_function(std::string x) {
arr.at( x)();// Error: term does not evaluate a function taking 0 arguments
}
void func_user(){
cout << "func_user" << endl;
}
void func_pwd(){
cout << "func_pwd" << endl;
}
void func_dir(){
cout << "func_dir" << endl;
}
};
int main(){
xyz a;
a.call_function( "dir");
}
Run Code Online (Sandbox Code Playgroud)
中的值arr是指向class的非静态成员函数的指针xyz,因此要调用它们,需要一个xyz对象。
直接调用成员函数时,通常可以省略this->。但是,当您通过指向成员的指针进行调用时,不能省略this->*。您必须明确地编写它:
(this->*arr.at(x))();
Run Code Online (Sandbox Code Playgroud)