c++可变类型模板

学习可变类型模板

#include <iostream>
#include <typeinfo>  //typeid需要
#include <cstdarg>   //可变参数

using namespace std;

template<class T>

// n代表多少个参数 t代表多个类型
T add(int n, T t...)
{
	cout << typeid(T).name() << endl;   //打印数据的类型
	va_list arg_ptr;		    //开始指针
	va_start(arg_ptr, n);		    //从arg_ptr开始,读取n个数
	T sum(0);
	for (int i = 0; i < n; i++)
	{
		//va_arg宏传入开始指针(获取开始读取的位置),及数据类型(根据数据类型占字节计算),返回值
		sum += va_arg(arg_ptr, T);
	}
	va_end(arg_ptr);		    //结束
	return sum;
}

int main(int argc, char *argv[])
{
	cout << add(3, 1, 2, 3) << endl;
	cout << add(2, 1.1, 2.2) << endl;

	cin.get();
	return 0;
}
秋风 2017-06-23