class A;
/******************************************************************************
/* 定義成員函數指針
/******************************************************************************/
/*
* 寫成函數指針typedef void (*fp)(int a, int b);
* 會報錯 error C2440: 'initializing' : cannot convert from '' to 'void (__cdecl *)(int,int)'
*/
typedef void (A::*mfp)(int a, int b);
typedef struct
{
int sth;
mfp p;
}T_MAPPING;
/******************************************************************************
/* 類的聲明
/******************************************************************************/
class A
{
public:
A() {}
~A() {}
void fa(int a, int b);
void fb(int a, int b);
void fc(int a, int b);
void test();
};
#include <stdio.h>
#include "fp.h"
/******************************************************************************
/* 成員函數實現
/******************************************************************************/
void A::fa(int a, int b)
{
printf("A::fa() a = %d, b = %d\n", a, b);
}
void A::fb(int a, int b)
{
printf("A::fb() a = %d, b = %d\n", a, b);
}
void A::fc(int a, int b)
{
printf("A::fc() a = %d, b = %d\n", a, b);
}
/******************************************************************************
/* 成員函數指針的使用
/******************************************************************************/
void A::test()
{
T_MAPPING a[]=
{
{10, &A::fa},
{20, &A::fb},
{30, fc},
};
for (int idx = 0; idx < sizeof(a)/sizeof(a[0]); idx++)
{
/*
* 函數指針和類成員函數指針的區別是使用類成員函數指針時需要加this指針
* 調用格式寫成(a[idx].p)(idx, 2 * idx);
* 則會報錯 er ror C2064: term does not evaluate to a function
*/
(this->*a[idx].p)(idx, 2 * idx);
}
}
摘自 勁草...無香