C语言里我们学过函数、指针、数组为解决实际的应用过程中出现的问题。什么问题呢?如下:
void MyTestFuntion(int length)
{
switch( length )
{
case 0:
function1();
break;
case 1:
......
case 255:
function255();
break;
}
}
以上代码完成了一个模拟的功能即根据输入参数的不同,进行不同的处理。这段代码表面看似风平浪静,可以完成功能。但是效率不高。需要进
行多次判断。PC上没有问题,假如针对嵌入式设备,这样做可能会影响效率。计算一下此函数有700多行,浪费设备空间了,就是一个“小胖”函数
。
针对以上的应用,我们可以使用“函数指针数组”处理,让它减肥。
下面针对两种情况说明:
一、C
#include "stdafx.h"
void function0(void);
void function1(void);
void function2(void);
void MyTestFuntion(int length);
void (*fun[])(void) = {
function0,
function1,
function2
};
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
MyTestFuntion(1);
return 0;
}
void function0(void){
//this is function 0
}
void function1(void){
//this is function 1
}
void function2(void){
//this is function 2
}
void MyTestFuntion(int length)
{
(*fun[length])();
}
以上最基本的用法了。通过使用函数指针数组将函数MyTestFuntion轻松减肥。
二、C++
=====TestClass.h=====
typedef void (*fun)(void);
class CTestClass
{
public:
CTestClass();
virtual ~CTestClass();
static void function0(void); //一定要是static!static函数不会传递“this”指针
static void function1(void); //其他的非static函数,会有一个隐形的翅膀“this”
static void function2(void); //导致为数组赋初值时类型不匹配。
void MyTestFuntion(int length);
private:
fun apfun[3];
};
=====TestClass.cpp=====
CWinApp theApp;
using namespace std;
#include <string>
#include <iostream>
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]){
CTestClass Ctest;
Ctest.MyTestFuntion(1);
return 1;
}
CTestClass::CTestClass(){
apfun[0] = function0;
apfun[1] = function1;
apfun[2] = function2;
}
CTestClass::~CTestClass(){ }
void CTestClass::function0(){
//this is function 0
}
void CTestClass::function1(){
//this is function 1
}
void CTestClass::function2(){
//this is function 2
}
void CTestClass::MyTestFuntion(int length){
(*apfun[length])();
}
以上由一个体型很好的函数出现了。
本文来自CSDN博客,转载自:http://blog.csdn.net/wang_apls/archive/2009/02/26/3940746.aspx