列表

详情


113. 简述一下 C++11 中的可变参数模板新特性

回答思路

得分点 概念、语法、模板参数包、展开参数包 标准回答 在 C++11 之前,类模板和函数模板只能含有固定数量的模板参数。C++11 增强了模板功能,它对参数进行了高度泛化,允许模板定义中包含 0 到任意个、任意类型的模板参数,这就是可变参数模板。可变参数模板的加入使得 C++11 的功能变得更加强大,能够很有效的提升灵活性。 1. 可变参数函数模板语法: template<typename... t=""> void fun(T...args) { // 函数体 } 模板参数中, typename(或者 class)后跟 ... 就表明 T 是一个可变模板参数,它可以接收多种数据类型,又称模板参数包。fun() 函数中,args 参数的类型用 T... 表示,表示 args 参数可以接收任意个参数,又称函数参数包。 2. 可变参数类模板语法: template <typename... types=""> class test; 3. 展开参数包的方式 - 可变参数函数模板可以采用递归方式、逗号表达式 + 初始化列表的方式展开参数包; - 可变参数类模板可以采用递归+继承的方式展开参数包。 加分回答 C++ 11 标准提供的 tuple 元组类就是一个典型的可变参数模板类,它的定义如下: template <typename... types=""> class tuple;</typename...></typename...></typename...>

上一题