程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++0x 學習筆記之 Variadic Templates

C++0x 學習筆記之 Variadic Templates

編輯:C++入門知識

by feng

Variadic Templates 的引入,消去了煩冗的模板特化。
一個例子:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #include <iostream>    double do_sum() {     return 0; }    template< typename T, typename... Args > double do_sum( T&& t, Args&& ... args ) {     return t + do_sum( args... ); }    int main() {        std::cout << do_sum( 1.0, 2.0, 3.0, 4.0 )               << std::endl;        return 0; }

這裡需要注意的有兩點:

  • double do_sum() 這個函數必須在變長模板函數 double do_sum( T&& t, Args&& … args ) 之前聲明
  • 變長模板函數實現中必須使用另外一個函數遞歸實現

另外要看到,在變長模板函數聲明中使用 … 的方法

  • 模板上用的是  template< typename… Args>
  • 函數參數中用的是 double do_sum(Arg … arg)
  • 函數體中用的是 do_sum(arg…)

大致可以看出,有 typename 的時候 .. 跟 typename 後邊,否則跟在 Arg 後邊,最後則是在參數 arg 後邊

 

如果需要知道到底傳入了多少個參數可以這樣來

 

1 2 3 4 5 template<typename ... Args> std::size_t how_many_args(Args ... args) {     return sizeof...(args); }

 

variadic template 基本使用到這裡就差不多了,下邊的內容略略而過即可

 

再次注意這個,來個稍微有點復雜的

1 2 3 4 5 6 7 8 template<typename... T> void f(T (* ...t)(int,
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved