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