- 指向函數的指針
函數的類型由它的返回值和參數列表決定, 但函數不能返回一個函數類型。
int fce( const char*, ... );
int fc( const char* );
// point to fce
typedef int (*PFCE)( const char*, ... );
// point to fc
typedef int (*PFC)( const char* );
// Initialization
PFCE pfce = fce;
PFC pfc = fc;
// Invoke the functions
pfce();
pfc();
- 指向重載函數的指針
在兩個函數指針類型之間不能進行類型轉換, 必須嚴格匹配才能找到相應的函數。
void ff( const char* );
void ff( unsigned int );
// Error: No Match, not available parameter list
void (*pf)(int) = ff;
// Error: No Match, not available return type
double (*pf2)( const char* )) = ff;
- 指向類實例成員函數的指針
指向類實例成員函數的指針必須匹配三個方面:參數類型和個數,返回類型,所屬類類型。
class Screen
{
public:
int Add(int lhs, int rhs);
int Del( int lhs, int rhs );
void ShowNumber(int value);
};
typedef int (Screen::*OPE)( int, int);
typedef void (Screen::*SHOW)( int);
OPE ope = &Screen::Add;
SHOW show = &Screen::ShowNumber;
Screen scr;
// Invoke its own member
int value = scr.Add(10, 20);
scr.ShowNumber(value);
// Invoke the function point
value = (scr.*ope)(10, 20);
(scr.*show)(value);
- 指向類靜態成員函數的指針
指向類靜態成員函數的指針屬於普通指針。
class Screen
{
public:
static int Add(int lhs, int rhs);
};
typedef int (*OPE)(int, int);
OPE ope = &Screen::Add;
int value = ope(10, 20);