C++传入成员函数作为回调函数

℡╲_俬逩灬. 提交于 2020-03-10 17:31:44
  1. 首先定义对应指针类型

    	typedef int(Test::*TestFunc)(int,int);
    
  2. 注册使用

    通过关键字注册,再通过关键字进行调用对应成员方法,这种比用if else/ switch case要快速得多

    	#include<stdio.h>
    	#include<map>
    	#include<string>
    	#define TESTADD     1
    	#define TESTLESS 2
    	#define TESTMINUS   3
    
    
    	class Test
    	{
    	public:
    		typedef int(Test::*TestFunc)(int,int);
    	public:
    		Test()
    		{
    			funcs[1]=&Test::add;
    			funcs[2]=&Test::less;
    			funcs[3]=&Test::minus;
    		}
    		int less(int a,int b){return a<b;}
    		int add(int a, int b){return a+b;}
    		int minus(int a, int b){return a-b;}
    
    		int calc(int a,int b,TestFunc func)
    		{
    			return (this->*func)(a,b);
    		}
    		int dosome(int a,int b,int op)
    		{
    			return (this->*funcs[op])(a,b);
    		}
    	private:
    		std::map<int,TestFunc> funcs;
    	};
    	int main()
    	{
    		Test t;
    		printf("%d\n",t.dosome(1,2,TESTADD));
    		printf("%d\n",t.dosome(1,2,TESTLESS));
    		printf("%d\n",t.dosome(1,2,TESTMINUS));
    		return 0;
    	}
    
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!