本文以函数模板为例进行说明,类模板可以添加相应方法实现。

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

 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)...);

调用Func函数

Func(5, "Hello World");

打印结果

Template Function Args [ size : 2 ]  [ int ]  [ char const [12] ]

C++ 获取可变模板参数类型相关推荐

  1. C++代码片段(三)过滤可变模板参数中某些类型的变量

    将可变模板参数列表中的某些类型过滤掉,然后返回剩下数据的元组.用到了上一篇中的判断可变模板参数中是否包含某一特定类型的方法 #include <iostream> #include < ...

  2. C++代码片段(二)判断可变模板参数中是否包含某一特定类型

    首先定义基础模板类,表示不包含给定类型 template <typename T, typename... Args> struct contains : public std::fals ...

  3. C++——可变模板参数

    声明:由于对可变模板参数了解资源有限,以下有些观点仅为个人参考手册实践得出的,不要被我个人的观点误导. 文章目录 一.基本语法知识 1.基本知识 2.基本语法 二.基本使用方法 1.基本演示 2.参数 ...

  4. c++11新特性的使用---可变模板参数、lambda、type_traits、optional综合使用

    通过惰性求值类的实现综合采用了可变模板参数.lambda.type_traits.optional进行实现 该类功能是:当初始化某个对象时,该对象引用了一个大对象,这个对象的创建需要较长的时间,同时有 ...

  5. 判断exception类型_C++核心准则T.44:使用函数模板推断类模板参数类型(如果可能)...

    T.44: Use function templates to deduce class template argument types (where feasible) T.44:使用函数模板推断类 ...

  6. c++11新特性的使用---可变模板参数、type_traits、function综合使用

    DLL帮助类 c++中手动调用dll是比较繁琐的,调用过程是:加载dll后还要定义一个对应的函数指针类型,接着调用GetProAddress获取函数地址,在转成函数指针,最后调用该函数如下例子: #i ...

  7. C++代码片段(四)萃取模板类的模板参数类型

    例如有类型 Test<int, double, std::string> 可以萃取出模板参数分别是 int, double, std::string 方法如下 #include <t ...

  8. 【初阶与进阶C++详解】第二十二篇:C++11新特性(列表初始化+变量类型推到+右值引用+新增默认成员函数+可变模板参数+lambda表达式+包装器function_bind)

  9. ParameterizedType获取java泛型参数类型

    这两天在看以前写的ssh项目时,遇到一个问题就是封装的BaseDaoImpl抽象类,构造方法里面是这样写的 Class<T> clazz;public BaseDaoImpl(){Para ...

最新文章

  1. 脑电分析系列[MNE-Python-4]| MNE中数据结构Evoked及其对象创建
  2. [学习笔记]stm32
  3. Java程序员从笨鸟到菜鸟之(十)枚举,泛型详解
  4. kafka丢数据问题方案(转载+整理+汇总)
  5. 算法题:输入一个表示整数的字符串,把该字符串转换成整数并输出。例如输入字符串“12345”,则输出整数“12345”
  6. 软件生存周期文档系列 之 6.用户操作手册
  7. Java NIO AIO编程
  8. ORACLE RAC如何增加节点
  9. 详解:Sqoop的安装
  10. 江民科技召开临时董事会 王江民之子接手管理
  11. 学习之路十四:客户端调用WCF服务的几种方法小议
  12. vue(h5)打包apk
  13. MATLAB调用电脑摄像头前安装图像采集工具箱硬件支持包
  14. cocoa touch框架
  15. 战国七雄中最强大的国家(除秦外)——赵国_我是亲民_新浪博客
  16. Bezier和B样条曲线
  17. ES6中展开运算符的深拷贝浅拷贝理解(ElementUI表格点击编辑,模态框内容与表格数据一起变的问题)
  18. C语言---sprintf组包、sscanf解包
  19. 一个老工程师的工作经历和思考
  20. 客快物流大数据项目(八十五):实时OLAP分析需求

热门文章

  1. 基于sklearn的机器学习实战
  2. NumPy-简单的统计分析
  3. 星际入门总汇集合N点要素
  4. 前端解决跨域问题(9个方法)
  5. 新品标题优化,标题精准引流,如何优化标题
  6. CTR预估模型DSSM
  7. 华为2018 软件题AC
  8. 机载计算机pdf,小型机载计算机电源的设计与研究打印完整版.pdf
  9. 如何查看服务器CPU核心数和线程数
  10. springboot 模块引用_SpringBoot项目之间相互引用