实现方法1:

#include <iostream>
using namespace std;

int func1(int a, int b)
{
	return a+b+10;
}
int func2(int a, int b)
{
	return a+b+20;
}
int func3(int a, int b)
{
	return a+b+30;
}
int func4(int a, int b)
{
	return a+b+40;
}
int func5(int a, int b)
{
	return a+b+50;
}

int func_all(int type, int a, int b)
{
	switch(type)
	{
	case 0:  return func1(a,b);
	case 1:  return func2(a,b);
	case 2:  return func3(a,b);
	case 3:  return func4(a,b);
	case 4:  return func5(a,b);
	}
	return 0;
}

void main()
{
	// PF_CALC pFuncList[5] = {func1, func2, func3, func4, func5};

	for (long k=0; k<5; k++)
	{
		printf("Test Func %d (2, 4): %d\n",
			k, func_all(k,2,4));
	}
	system("pause");
}
实现方法2:

#include <stdio.h>
#include <stdlib.h>

typedef int (*PF_CALC) (int a, int b);

int func1(int a, int b)
{
	return a+b+10;
}
int func2(int a, int b)
{
	return a+b+20;
}
int func3(int a, int b)
{
	return a+b+30;
}
int func4(int a, int b)
{
	return a+b+40;
}
int func5(int a, int b)
{
	return a+b+50;
}

void main()
{
	PF_CALC pFuncList[] = {&func1, &func2, &func3, &func4, &func5};

	for (long k=0; k<5; k++)
	{
		printf("Test Func %d (2, 4): %d\n",
			k, pFuncList[k](2,4));
	}
	system("pause");
}
3.
#include <stdio.h>
#include <stdlib.h>

typedef int (*NetMsgFunction) (int a, int b);

NetMsgFunction pFuncList[10];

int func1(int a, int b)
{
	return a+b+10;
}
int func2(int a, int b)
{
	return a+b+20;
}
int func3(int a, int b)
{
	return a+b+30;
}
int func4(int a, int b)
{
	return a+b+40;
}
int func5(int a, int b)
{
	return a+b+50;
}

void Reg(int nMsgId,NetMsgFunction fuc)
{
	pFuncList[nMsgId] = fuc;
}

void main()
{
	Reg(0,func1);
	Reg(1,func2);
	Reg(2,func3);
	Reg(3,func4);
	Reg(4,func5);
	for (long k=0; k<5; k++)
	{
		printf("Test Func %d (2, 4): %d\n",k, pFuncList[k](2,4));
	}
	system("pause");
}