C++模板介紹:什麼是變長模板函數

來源:互聯網
上載者:User

最近的C++語言標準有些更進一步的複雜特性,諸如加上了變長模板。我在嘗試理解這個特性的過程中

的一個最大的問題是,沒有足夠簡單的程式碼範例來說明到底變長模板是如何使用和起作用的。

以下是 我的一個基本範例來說明變長模板:

template <class ...A> int func(A... arg)

{

   return sizeof...(arg);

}

int main(void)

{

   return func (1,2,3,4,5,6);

}

首要介紹的是一些術語: 一個模板參數現在可以是一個模板參數包, <class...A>。一個模板參數包可以代表任意數量的

模板參數。在以上這個範例中,模板 <class...A>定義了func這個函數,他擁有任意數量的函數參數。函數參數(A... arg)即為

一個函數 參數包,他以一個參數的"形式"代表了模板template <class...A>參數包的每個成員。在這 個樣本中,我們使用了6個參數來調用函數func。

模板參數推導(template argument deduction)會將參數 包<class...A>推導成為

<int,int,int,int,int,int>,接著函數參數包變成 (int,int,int,int,int,int),正好對應了6個傳遞過來的整形參數。

變長操作符sizeof...簡單的返回了參 數包的參數個數(函數或者模板的),結果為6.

當然任何參數包多可以為空白,考慮以下代碼示 例:

template <class ...A> int func(A... arg)

{

   return sizeof... (arg);

}

int main(void)

{

   return func();

}

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

11.11 Big Sale for Cloud

Get Unbeatable Offers with up to 90% Off,Oct.24-Nov.13 (UTC+8)

Get It Now >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。