赞
踩
记录一下对参数包的新认识,前置…叫做XX包,后置…叫做包扩展。我对这个包扩展的理解是递归把这个包分解了,而不是扩展,就比如说这个函数void fun(T t,Args… args)下面的return是解出来一个参数给t,解出来一个参数给t,直到剩下最后一个参数的时候调用最上面的函数(相当于递归函数的 出口),如果没有最上面的这个fun是不能运行的。 这个T类型也必须放在函数的开头,如果不是这样会发生未找到匹配函数,这个很好理解。还是拿这个函数来举例子,s传给T,age和grade变成一个参数包,输出完s递归把age分解给T,然后grade由上面的函数输出,整个调用就结束了。
template<typename T> void fun(T args) {//最后一个参数才调用这个函数 cout << args << endl; } template<typename T,typename ...Args>//模板上的...叫做模板参数包 void fun(T t,Args... args) {//这个叫做参数包 cout << t << endl; return fun(args...);//后置的...叫做包扩展。 //cout << args << endl; } int main() { int age = 21; string s = "dxgzg"; int grade = 100; fun(s, age,grade); return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。