湖南网站建设找拉米拉,wordpress mip改造,vs做网站连数据库,公司如何建立网站前言 可变参数模板是C11中的新特性#xff0c;它能够让我们创建可以接收可变参数的函数模板和类模板#xff0c;相比C98/03#xff0c;类模版和函数模版中只能含固定数量的模版参数#xff0c;可变模版参数是一个巨大的改进#xff0c;通过系统系统推演数据的类型#xf…前言 可变参数模板是C11中的新特性它能够让我们创建可以接收可变参数的函数模板和类模板相比C98/03类模版和函数模版中只能含固定数量的模版参数可变模版参数是一个巨大的改进通过系统系统推演数据的类型不用自己写出模板参数类型。 下面我们来创建一个基本的的能够接收可变参数的函数模板
templateclass ...Args
void ShowFunc(Args... args)
{
}
声明一个参数包Args... args这个参数包中可以包含0到任意个模板参数。
上面代码中Args是一个模板参数包args是一个函数形参参数包。
#includeiostream
#includestring
using namespace std;
templateclass ...Args
void ShowFunc(Args... args)
{cout sizeof...(args) endl;
}
int main()
{ShowFunc(1);ShowFunc(1, 1.1);ShowFunc(1, 1.1, A, std::string(sort));return 0;
}
sizeof...(args)是计算该函数中含有多少个参数即计算函数形参的个数。 下面我们来看一下如何使用可变参数的函数模板获取其参数包的值。 方法一编译器编译时的递归推演第一个模板参数依次解析获取参数包中的参数值。 #includeiostream
#includestring
using namespace std;// 递归终止函数
template class T
void ShowFunc(const T t)
{cout t endl;
}
// 展开函数
template class T, class ...Args
void ShowFunc(T value, Args... args)
{cout value ;ShowFunc(args...);
}
int main()
{ShowFunc(1);ShowFunc(1, 1.1);ShowFunc(1, 1.1, A, std::string(sort));return 0;
} 方法二利用逗号表达式展开参数包初始化数组arr强行让编译器解析参数包参数包有几个参数PrintArg就自动推演生成相应个。 #includeiostream
#includestring
using namespace std;template class T
void PrintArg(T t)
{cout t ;
}
//展开函数
template class ...Args
void ShowFunc(Args... args)
{int arr[] { (PrintArg(args), 0)... };cout endl;
}
int main()
{ShowFunc(1);ShowFunc(1, A);ShowFunc(1, A, std::string(CSDN));return 0;
}