C++ Primer 5th笔记(chap 19 特殊工具与技术)将成员函数用作可调用对象
生活随笔
收集整理的這篇文章主要介紹了
C++ Primer 5th笔记(chap 19 特殊工具与技术)将成员函数用作可调用对象
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 通過一個指向成員函數的指針進行函數調用
利用.*或者->*運算符將該指針綁定到特定的對象上。
與普通的函數指針不同,成員指針不是一個可調用對象
- 不支持函數調用運算符。
- 不能直接將一個指向成員函數的指針傳遞給算法
2. 使用fuction生成一個可調用對象
vector<string> svec; function<bool (const string&)> fcn = &string::empty; find_if(svec.begin(), svec.end(), fcn); / / 假設it 是 find_if 內部的迭代器,則*it 是給定范圍內的一個對象 if (fcn (*it) ) //假設 fcn 是 find_if 內部的一個可調用對象的名字 <=> if ( ( (*it).*p) () ) //假設 p 是 fen 內部的一個指向成員函數的指針2.1 定義function對象
指定該對象所能表示的函數類型, 即可調用對象的形式。
如果可調用對象是一個成員函數,
- 第一個形參必須表示該成員是在哪個(一般是隱式的) 對象上執行的。
- 指明對象是否是以指針或引用的形式傳入
2.2 使用mem_fn生成一個可調用對象
使用標準庫功能mem_fn來讓編譯器負責推斷成員的類型。
find_if(svec.begin(), svec.end(), mem_fn(&string::empty));// mem_fn生成的對象可以通過對象調用, 也可以通過指針調用 //可以認為 mem fn 生成的可調用對象含有一對重載的函數調用運算符: 一個接受 string*, 另一個接受 strings auto f = mem_fn(&string::empty); // f接收一個string或者一個string* f(*svec.begin()); // 正確: 傳入一個string對象, f使用.*調用empty f(&svec[0]); // 正確: 傳入一個string指針, f使用->*調用empty2.3 使用bind生成一個可調用對象
使用 bind 時, 必須將函數中用于表示執行對象的隱式形參轉換成顯式的
auto it = find_if(svec.begin(), svec.end(), bing(&string::empty, _1));// bind生成的可調用對象第一個實參既可以是string的指針, 也可以是string的引用 auto f = bind(&string::empty, _1); f(*svec.begin());// 正確: 實參是一個 string, f 使用.*調用 empty f(&svec[0]);// 正確: 實參是一個 string 的指針, f 使用->*調用 empty總結
以上是生活随笔為你收集整理的C++ Primer 5th笔记(chap 19 特殊工具与技术)将成员函数用作可调用对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ Primer 5th笔记(cha
- 下一篇: EOS 智能合约源代码解读 (14)sy