C++三个主题
variadic template(数量不定的模版参数)
其中示例来源于侯捷老师
#include <iostream>
#include <cstring>
using namespace std;
void print()
{
}
template<typename T, typename... Types>
void print(const T & first, const Types&...args) {
cout << "sizeof :" << sizeof...(args) << endl;
cout << first << endl;
print(args...); //继续递归进行函数print 的调用
}
int main()
{
print(7.5, "hsdfo", bitset<16>(377), 42);
}
我们可以看到在模版参数中除了
T
,还有一个... Types
后面那个就是意味着,我这个函数可以接受一个T类型参数和不定数量的参数,其中第二个看作是 一个包
如果想要查看这个包里面参数的数量的话,使用
sizeof...(args)
,args
不是关键字,是你指定的参数名称上面的print函数的例子就是:
- 我接收的参数是一个参数 + 一个参数包
- 函数执行过程是打印第一个参数,然后将包作为参数继续传递给print
- 那么传递给下一个print,收到的参数是
上面大包的第一个参数
+除去一个参数后的小包
- 直到没有参数的时候调用上面没有参数的 print
auto和 for的配合使用
auto
可以根据你的表达式进行自动的类型推导,for (decl : coll)
可以遍历容器因此我们可以使用上述进行简单的书写,同时在对于参数类型十分复杂的时候还是可以简化的
//例如说打印二维 vector中的第一个元素
void printS(const vector<vector<int>> & V) {
for (auto each : V) {
//每一个 each 都是一个vector
cout << each[0];
}
}