您的位置:首页 > 编程语言 > C语言/C++

C++ 获取可变模板参数类型

2017-05-18 22:34 204 查看
本文以函数模板为例进行说明,类模板可以添加相应方法实现。

含有可变模板参数的函数模板如下所示。

template <typename... Args>
void Func(Args&&... args)
{

}
我们知道可变参数的类型是由编译器根据传入函数的实参推导出来的,若我们需要获取可变参数的类型,可以使用如下函数模板。

template <typename... Args>
void PrintArgs(const char *desc, Args&&... args)
{
int argn = sizeof...(Args);
const char *argc[] = { typeid(Args).name()... };
cout << desc << " [ size : " << argn << " ] ";
for (int i = 0; i < argn; i++)
{
cout << " [ " << argc[i] << " ] ";
}
cout << endl;
}
参数desc为描述信息,args为可变模板参数,可以配合完美转发来保留传入参数的左值引用和右值引用特性。可以用下面代码来使用此函数。

PrintArgs("Template Function Args", std::forward<Args>(args)...);


4000
调用Func函数

Func(5, "Hello World");
打印结果

Template Function Args [ size : 2 ]  [ int ]  [ char const [12] ]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  可变模板参数