C++使用可变参数
今天要说的是C++使用可变参数的方式,包括std::initializer_list<T>模板类、可变参数模板。
std::initializer_list<T>(<initializer_list>)
是C++11新标准引入的初始化的列表,是一个模板类,可通过{...}形式传入并构造,这里介绍使用可变参数的情况:
#include<initializer_list>#include<iostream>#include<string>usingstd::string;usingstd::cout;usingstd::endl;template<typenameT>usinginitializer_list=std::initializer_list<T>;voidfunc(initializer_list<conststring>L){cout<<L.size()<<endl;for(autoa=L.begin();a!=L.end();++a){cout<<*a<<"";}cout<<endl;}intmain(){func({"123","asd","zmh"});return0;}
有个特点是初始化列表存储的类型是固定的,如果传入不可支持类型转换则编译错误
可变参数模板
可变模板参数是C++11新标准引入的,是可接收可变数目参数模板的模板函数和模板类,可变数目的参数是参数包:模板参数包(template<typename... T>)、函数参数包(T... type),与初始化列表不同的是可以接收不同类型的参数,但由于是模板则不支持分离编译,且用法较复杂,这里介绍可变参数模板的模板函数:
#include<iostream>usingstd::cout;usingstd::endl;usingstd::string;template<typenameT>voidfunc(conststring&s1,constT&s2){cout<<s1<<""<<s2<<endl;}template<typename...T>voidfunc(conststring&s,constT&...t){cout<<sizeof...(t)<<endl;cout<<s<<"";func(t...);}
#include"a.h"intmain(){func("123","asd","zmh");return0;}
此处实参可以不使用{... , ... , ...}方式传入。
可变参数模板有另一个主要用处,可以用于模板转发。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。