variadic template模板参数可变化----C++学习之路
2017-11-12 23:37
405 查看
1.什么叫做variadic template?
variadic可变的,连起来就是数量不定的模板参数。
2.语法上怎么写?
直接用例子:
template<typename T,typename... TYpes>
void print(const T& firstArg,const Types&... args)
{
cout<<firstArg<<endl;
print(args...);
}注意三个点不是省略,而是语法。将这个分为一个和一大块。
以这个例子,当我们调用的时候:
print(7.5,"hello",bitset<16>(377),42);7.5就是firstArg。
然后又将后面的一大块传给自己,递归下去。下一次递归“hello”就是firstArg,得到的结果就是:
7.5
hello
00000000101111001
42当然,bitset是有重载<<这个符号。等到最后一个42的时候,就会分为一个和0个,当0个传进去就会失败
所以必须再写一个版本:
void print()
{
}也就是到最后0个的时候,编译器会选择用这个,所以停止了。
3. ...三点其实是一个所谓的pack(包)
用于template parameter 就是template parameter pack(模板参数包)
用于function template parameter types 就是function parameter pack(函数参数类型包)
用于function parameters就是function parameters pack(函数参数包)
4.如果我们想知道这个包有多少个:
用sizeof...(args)这就直到那一包有多少个。
,
variadic可变的,连起来就是数量不定的模板参数。
2.语法上怎么写?
直接用例子:
template<typename T,typename... TYpes>
void print(const T& firstArg,const Types&... args)
{
cout<<firstArg<<endl;
print(args...);
}注意三个点不是省略,而是语法。将这个分为一个和一大块。
以这个例子,当我们调用的时候:
print(7.5,"hello",bitset<16>(377),42);7.5就是firstArg。
然后又将后面的一大块传给自己,递归下去。下一次递归“hello”就是firstArg,得到的结果就是:
7.5
hello
00000000101111001
42当然,bitset是有重载<<这个符号。等到最后一个42的时候,就会分为一个和0个,当0个传进去就会失败
所以必须再写一个版本:
void print()
{
}也就是到最后0个的时候,编译器会选择用这个,所以停止了。
3. ...三点其实是一个所谓的pack(包)
用于template parameter 就是template parameter pack(模板参数包)
用于function template parameter types 就是function parameter pack(函数参数类型包)
用于function parameters就是function parameters pack(函数参数包)
4.如果我们想知道这个包有多少个:
用sizeof...(args)这就直到那一包有多少个。
,
相关文章推荐
- template template parameter模板模板参数笔记----C++学习之路
- member template成员模板笔记----C++学习之路
- c++ template 学习之一:模板参数
- 编译器对C++ 11变参模板(Variadic Template)的函数包扩展实现的差异
- 我的C++成长之路(-) 学习阶段 -02 函数、模板、数组的操作
- C++学习之可变参数的函数与模板
- c++无类型参数模板(non-type template parameter)
- C++学习之可变参数的函数与模板
- c++ template笔记(3)非类型模板参数nontype template parameters
- <C++学习笔记>函数模板 template
- C++学习之可变参数的函数与模板
- c++ template(7-1)模板参数声明
- C++学习笔记36 (模板的细节明确template specialization)和显式实例(template instantiation)
- C++ - 非类型模板参数(nontype template parameters) 使用 及 代码
- C++ Variadic template(可变长度参数函数)
- C++ - 非类型模板参数(nontype template parameters) 使用 及 代码
- C++ template模板的学习
- C++ - 函数模板(function template)右值引用参数 问题 及 解决
- Spring学习-25:Spring中的JDBC Template(JDBC模板):设置参数到属性文件
- C++ - 函数模板(function template)右值引用参数 问题 及 解决