溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C++11可變參數(shù)模板怎么使用

發(fā)布時間:2021-11-26 15:09:03 來源:億速云 閱讀:168 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“C++11可變參數(shù)模板怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“C++11可變參數(shù)模板怎么使用”吧!

可變參數(shù)函數(shù)

C語言中,可變參數(shù)函數(shù)可以說是一個比較神奇的存在。例如最常用的printf函數(shù),它的原型如下:

C++11可變參數(shù)模板怎么使用

它的第一個參數(shù)是const char*類型的format,后面參數(shù)的類型和名稱都沒有定義,只有三個點。

雖然從C語言編譯的角度來講,在這個位置程序員可以寫任意個數(shù),任意類型的參數(shù),實際上printf函數(shù)根據(jù)format指定的格式字符串來使用后面指定的實參值,個數(shù)少了或者類型錯誤常常會導(dǎo)致錯誤??勺儏?shù)的個數(shù),類型要通過前面的參數(shù)來傳遞,這算是可變參數(shù)的第一個難點。

由于可變參數(shù)函數(shù)的原型中只是說參數(shù)可變,但是并沒有指定這些可變的參數(shù)保存在哪里,需要另外的方法來生成參數(shù)列表。例如下面的示例代碼:

C++11可變參數(shù)模板怎么使用

首先定義參數(shù)列表,然后通過va_start取得變量列表的內(nèi)容,使用后再使用va_end釋放變量列表。這個必須的步驟是可變參數(shù)函數(shù)的第二個難點。

可變參數(shù)模板聲明

C++11增加了可變參數(shù)模板,可以接受可變數(shù)目,類型的參數(shù)。我們通過開發(fā)中常用的輸出調(diào)試信息的例子介紹紹可變參數(shù)模板的使用方法。首先是聲明可變參數(shù)模板。

C++11可變參數(shù)模板怎么使用

在模板參數(shù)定義的部分,通過typename...定義可變模板參數(shù)。三個點的含義和C語言中的可變參數(shù)定義類似,不同的是后面接著指定了可變參數(shù)列表的名稱Args。

在參數(shù)定義的部分,使用可變模板參數(shù)定義的Args以相同的格式定義函數(shù)的可變參數(shù)列表。

這個參數(shù)列表可以在模板函數(shù)的實現(xiàn)中直接使用,這樣在定義可變參數(shù)模板時就解決了可變參數(shù)函數(shù)的第二個難點。

可變參數(shù)模板的實現(xiàn)

可變參數(shù)模板的實現(xiàn)通常需要一些小技巧:遞歸和重載。還是先看代碼。

C++11可變參數(shù)模板怎么使用

代碼中定義了兩個重載的writeLog函數(shù),一個只接受類型為T的參數(shù)t,另一個除了t之外,還接受可變參數(shù)rest。當(dāng)使用一個參數(shù)調(diào)用writeLog的時候,實際調(diào)用上面的函數(shù);當(dāng)使用多個參數(shù)調(diào)用writeLog的時候調(diào)用下面的writeLog。

下面的writeLog首先使用第一個參數(shù)t調(diào)用上面的writeLog之后,使用rest遞歸調(diào)用writeLog(嚴(yán)格講是rest中有多于一個參數(shù)的時候)。從調(diào)用者來看,每次處理一個參數(shù)之后,使用其余的參數(shù)再次調(diào)用writeLog,直到最后調(diào)用一個參數(shù)的writeLog。

下面是使用writeLog的示例代碼:

C++11可變參數(shù)模板怎么使用

可以任意組合參數(shù)的類型和個數(shù),而且不需要另外提供任何信息。這樣就有效地解決了可變參數(shù)函數(shù)的第一個難點。

更近一步

本例中一個參數(shù)的writeLog非常簡單,只是簡單的使用cout進行輸出,如果有特殊的需求,可以繼續(xù)重載這個函數(shù)。例如log輸出中經(jīng)常需要的時間信息,就可以這樣實現(xiàn):

C++11可變參數(shù)模板怎么使用

使用方法更加簡單:

C++11可變參數(shù)模板怎么使用

輸出結(jié)果

C++11可變參數(shù)模板怎么使用

字體一如既往的丑,但是內(nèi)容可以說足夠神奇!

到此,相信大家對“C++11可變參數(shù)模板怎么使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

c++
AI