首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ 類成員指針:語法、用法與 mem_fn/bind 適配

     編輯:關於C++

數據成員指針

聲明:`類型 類名::*指針名;` 賦值:`指針名 = &類名::成員;` 訪問:`對象.*指針名` 或 `指針->*指針名`。必須加取地址符 `&`。

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

mem_fn 適配器

`std::mem_fn` 將成員函數指針包裝為可調用對象,自動處理對象/指針調用。`auto f = mem_fn(&Calc::add); f(c,3,4);` 或 `f(&c,3,4);`。頭文件 ``。

bind 綁定

`std::bind(&Calc::add, &c, _1, _2)` 綁定對象與佔位符,生成可調用對象。更靈活,支持參數綁定、重排。

總結

類成員指針類型包含類作用域,非普通指針。`mem_fn` 和 `bind` 將其轉為標準可調用對象,便於配合 STL 算法(如 `for_each`、`transform`)使用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved