成员函数指针何静态成员函数指针使用起来与普通的指针不相同,具体如下。
class Manager
{
public:
void func1() const
{
cout << "func1" << endl;
}
void func2() const
{
cout << "func1" << endl;
}
void func3() const
{
cout << "func3" << endl;
}
static void func4()
{
cout << "func4" << endl;
}
};
int main()
{
Manager manager; //创建一个对象
using ptr = void(Manager::*)() const; //为成员函数指针起别名,格式是这样的,意思为指向Manager内函数返回值为void,参数为void的常函数
map<string, ptr> func_table = { {"1",&Manager::func1},{"2",&Manager::func2},{"3",&Manager::func3}};
auto end = func_table.end();
auto res = func_table.find("2");
if (res != end)
{
(manager.*res->second)(); //注意调用格式,需要传入一个对象才能够调用,必须加括号,这样才能表示出这是一个函数
}
using ptr2 = void(*)(); //静态成员函数和普通的函数使用的方法相同
map<string,ptr2> funcTable = {{"4",&Manager::func4}};
auto res2 = funcTable.find("4");
res2->second();
return 0;
}
1、声明类成员函数指针,不需要指定对象,但使用该指针需要对象来调用。
2、获取类成员函数地址与获取普通函数地址不同,需要加&。
3、普通函数的函数名即为函数地址。
Comments NOTHING