成员函数指针和静态成员函数指针的使用

Aki 发布于 2022-11-11 259 次阅读


成员函数指针何静态成员函数指针使用起来与普通的指针不相同,具体如下。


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、普通函数的函数名即为函数地址。