聲明:`類型 類名::*指針名;` 賦值:`指針名 = &類名::成員;` 訪問:`對象.*指針名` 或 `指針->*指針名`。必須加取地址符 `&`。
struct A { int x; const char c; };
int A::*px = &A::x;
const char A::*pc = &A::c;
A a{10, 'Z'};
cout << a.*px << " " << a.*pc; // 10 Z
聲明:`返回類型 (類名::*指針名)(參數列表);` 賦值同樣需 `&`。調用:`(對象.*指針名)(參數)` 或 `(指針->*指針名)(參數)`。const 成員函數指針類型包含 const。
struct Calc { int add(int a,int b){ return a+b; } };
int (Calc::*pf)(int,int) = &Calc::add;
Calc c;
cout << (c.*pf)(3,4); // 7
`std::mem_fn` 將成員函數指針包裝為可調用對象,自動處理對象/指針調用。`auto f = mem_fn(&Calc::add); f(c,3,4);` 或 `f(&c,3,4);`。頭文件 `
`std::bind(&Calc::add, &c, _1, _2)` 綁定對象與佔位符,生成可調用對象。更靈活,支持參數綁定、重排。
類成員指針類型包含類作用域,非普通指針。`mem_fn` 和 `bind` 將其轉為標準可調用對象,便於配合 STL 算法(如 `for_each`、`transform`)使用。