本篇內容主要講解“C++11標準庫mem_fn類模板怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C++11標準庫mem_fn類模板怎么使用”吧!
我們提供的服務有:網站設計、成都網站制作、微信公眾號開發、網站優化、網站認證、哈巴河ssl等。為超過千家企事業單位解決了網站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的哈巴河網站制作公司
定制算法
算法是C++標準庫中非常重要的部分,C++通過算法+容器的方式將數據結構和算法進行了分離。這樣做的好處就是使用戶獲得最大限度的靈活性。
例如下面的Tracer類。
我們可以非常方便的定義保存Tracer對象的數據結構:
然后非常方便的利用排序算法進行排序:
代碼中的compare是另外定義的一個比較函數:
通過這個函數來選擇比較的對象并決定比較的結果。
嚴格講,算法中要求的并不是函數,而是一個可調用對象。參考本連載前面的文章可以知道,可調用對象就是可以以fun(a)的形式執行的功能。C++中的可調用對象包括函數,函數對象,lambada表達式,參數綁定等,它們都可以作為算法的參數。
使用function生成可調用對象
上面講到的方法非常容易理解,但是稍微有點麻煩,我們希望可以直接使用Tracer的成員函數compare成員函數。這個需求可以使用C++11中引入的function來解決:
function是一個模板,可以指定可調用對象的形式。例子中指定了tcomp的形式:返回值為bool,參數為兩個Tracer&。代碼中將Tracer的成員函數compare賦值給tcomp之后就可以使用它了:
這種情況下,tcomp(t1,t2)動作可以理解為t1.compare(t2)。通過這種方式,我們可以將類的成員函數轉換為可調用對象。于是排序代碼就可以寫成下面的樣子。
使用mem_fn生成可調用對象
使用function的方法,還是有點麻煩:雖然&Tracer::compare的簽名已經決定了可調用對象的形式,程序員還是需要另外指定。解決這個問題的方法是使用mem_fn(注意不是mem_fun)來生成可調用對象:
mem_fn會根據成員函數指針推斷可調用函數的類型,就省去了另外指定的步驟。
到此,相信大家對“C++11標準庫mem_fn類模板怎么使用”有了更深的了解,不妨來實際操作一番吧!這里是創新互聯網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
新聞標題:C++11標準庫mem_fn類模板怎么使用
路徑分享:http://vcdvsql.cn/article20/pdeojo.html
成都網站建設公司_創新互聯,為您提供外貿建站、網站設計、動態網站、做網站、面包屑導航、商城網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯