C++的可变参数模板 | 您所在的位置:网站首页 › mockitowhen参数匹配 › C++的可变参数模板 |
可变参数模板可以创建这样的函数和模板类,即可接受可变数量的参数。要创建可变参数模板,需要理解几个要点 1.模板参数包 2.函数参数包 3.展开参数包 4.递归 1.模板参数包和函数参数包 C++11提供用省略号表示的元运算符,能够声明表示模板参数包的标识符。模板参数包基本上是一个类型列表。同样,它还让我们能够声明表示函数参数包的标识符,而函数参数包的标识符,而函数参数包基本上是一个值列表 template //Args是模板参数包 void show_list1(Args…args) //args是函数参数包 { …. } Args和T的差别在于,T与一种类型匹配,而Args与任意数量的类型匹配。函数参数包args包含的值列表与模板参数包Arg包含的类型列表匹配,无论是类型还是数量 2.展开参数包 可将省略号放在函数包的右边,将参数包展开 template //Args是模板参数包 void show_list1(Args…args) //args是函数参数包 { show_list1(args…); } 但表示法args…展开为一个函数参数列表。不幸的是,该函数调用与原始函数调用相同,因此它将使用相同的参数不断调用自己,导致无限递归,所以我们需要正确的使用递归。这里使用递归的核心理念是,将函数参数包展开,对列表中的第一项进行处理,再将余下的内容传递给递归调用,以此类推,直到列表为空。 template void show_list3(T value,Args…args) show_list3()的第一个实参决定了T和value的值,而其他实参决定了Args和args的值 掌握了这些以后我们就可以进行实际应用了 #include #include using namespace std; void show_list(){} //零个参数啥也不做 template //一个参数打印值和换行符 void show_list(const T& value) { cout |
CopyRight 2018-2019 实验室设备网 版权所有 |