程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++11 新特性之 變長參數模板

C++11 新特性之 變長參數模板

編輯:C++入門知識

template 
void fun(ARGS ... args)

首先明確幾個概念
1,模板參數包(template parameter pack):它指模板參數位置上的變長參數,例如上面例子中的ARGS

2,函數參數包(function parameter pack):它指函數參數位置上的變長參數,例如上面例子中的args


一般情況下 參數包必須在最後面,例如:

template 
void fun(T t,Args ... args);//合法

template 
void fun(Args ... args,T t);//非法

有一個新的運算符:sizeof...(T) 可以用來獲知參數包中打包了幾個參數,注意 不是 參數所占的字節數之和。


#include 
using namespace std;

template  //Args:模板參數包
void func(Args ...args)      //args:函數參數包
{
	cout << sizeof...(args) << endl;	
}

int main()
{	
	func(1, 2, 3, 4, 5); //輸出5
	return 0;
}


函數實例
一個常用的技巧是:利用模板推導機制,每次從參數包裡面取第一個元素,縮短參數包,直到包為空。

#include 
using namespace std;

template 
void func(const T& t)
{
	cout << t << endl;
}

template  //Args:模板參數包
void func(const T& t, Args ...args)      //args:函數參數包
{
	cout << t << endl;
	func(args...);
}

int main()
{	
	func(1, 2, 3, 4, 5);
	return 0;
}


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved