c++ 将函数指针存入map中调用

1、普通函数指针

#include "stdafx.h"
#include
#include
#include"FunMap.h"
#include
typedef int(*FUN1)(int a);
int a(int i)
{
	printf("类外函数指针存入map调用%d\n",i);
	return 9;
}
int main()
{
    map  mapfun;
	mapfun.insert(pair(1, a)); //将函数指针存入map中,设置key为1
	FUN1 f1 = mapfun[1];   //通过key取出函数指针
	f1(9);                   //函数调用
	return 0;
}

2、类函数指针

定义一个类,将类函数指针存入map中

FunMap.h实现如下

#pragma once
#include
#include
using namespace std;
class FunMap
{
public:
	typedef int(FunMap::*FUN)(int a);   //注意类函数指针要如此格式加上类名::
	FunMap();
	~FunMap();
	int a(int y) {
		printf("类中函数指针存入成员map调用:这是a函数,传参为%d\n",y);
		return y;
	}
	int b(int y) {
		printf("类中函数指针存入成员map调用:这是b函数,传参为%d\n",y);
		return y;
	}
	map  mapfun;
private:
	
};
FunMap::FunMap()
{
	mapfun.insert(pair(1, &FunMap::a)); //在实例化的时候,将类函数指针存入map
	mapfun.insert(pair(2, &FunMap::b));
}

FunMap::~FunMap()
{
}

调用实例:

main.cpp

#include "stdafx.h"
#include"FunMap.h"
#include

int main()
{
	FunMap *m = new FunMap();
	while (1) {
		printf("请输入你要执行的函数代码\n");
		int a = 0;
		scanf("%d", &a);
		FunMap::FUN f=m->mapfun[a];
		(m->*f)(2);   //调用函数指针时,要注意指定该指针属于那个类的实例
	}
	system("pause");
    return 0;
}

运行代码如图

c++ 将函数指针存入map中调用_第1张图片

 

你可能感兴趣的:(C语言,c++,开发语言)