C++11变参模板如何改写为长尾?
- 内容介绍
- 文章标签
- 相关推荐
本文共计3854个文字,预计阅读时间需要16分钟。
1. 概述+变参模板(variadic template)是C++11新增的最强大特性之一,它对参数进行了高度泛化,能够表示0到任意数量的任意类型参数。相较于C++98/03,类模板和函数模板中只能包含固定数量的参数。
1.概述
变参模板(variadic template)是C++11新增的最强大的特性之一,它对参数进行了高度泛化,它能表示0到任意个数、任意类型的参数。相比C++98/03,类模版和函数模版中只能含固定数量的模版参数,可变模版参数无疑是一个巨大的改进。然而由于可变模版参数比较抽象,使用起来需要一定的技巧,掌握也存在一定的难度。
2.可变模版参数的展开
可变模板参数和普通模板参数的语义是一样的,只是写法上稍有区别,声明可变参数模板时需要在typename或class后面带上省略号“…”。可变参数模版的定义形式如下:
//可变参数函数模板 template<typename... T> void f(T... args); //可变参数类模板 template<typename... T> class ClassFoo;
上面的参数中,T为模板参数包(template parameter pack),args为函数参数包(function parameter pack),参数包里面包含了0到N(N>=0)个参数。我们无法直接获取参数包中的每个参数的,只能通过展开参数包的方式,这是使用可变参数模版的一个主要特点,也是最大的难点。
本文共计3854个文字,预计阅读时间需要16分钟。
1. 概述+变参模板(variadic template)是C++11新增的最强大特性之一,它对参数进行了高度泛化,能够表示0到任意数量的任意类型参数。相较于C++98/03,类模板和函数模板中只能包含固定数量的参数。
1.概述
变参模板(variadic template)是C++11新增的最强大的特性之一,它对参数进行了高度泛化,它能表示0到任意个数、任意类型的参数。相比C++98/03,类模版和函数模版中只能含固定数量的模版参数,可变模版参数无疑是一个巨大的改进。然而由于可变模版参数比较抽象,使用起来需要一定的技巧,掌握也存在一定的难度。
2.可变模版参数的展开
可变模板参数和普通模板参数的语义是一样的,只是写法上稍有区别,声明可变参数模板时需要在typename或class后面带上省略号“…”。可变参数模版的定义形式如下:
//可变参数函数模板 template<typename... T> void f(T... args); //可变参数类模板 template<typename... T> class ClassFoo;
上面的参数中,T为模板参数包(template parameter pack),args为函数参数包(function parameter pack),参数包里面包含了0到N(N>=0)个参数。我们无法直接获取参数包中的每个参数的,只能通过展开参数包的方式,这是使用可变参数模版的一个主要特点,也是最大的难点。

