做兼职一般去哪个网站好,软件界面,自己做网站类型,东营大众网遍历可变参数 遍历可变参数获取可变参数大小通过递归方式遍历可变参数通过可变参数特性来求和 遍历可变参数
#pragma oncetemplateclass ... ParamTypes
void Func(paramTypes ... param)
{}可以看作是有一个结构体里面装满了参数#xff0c;把结构体放到…中。… 遍历可变参数 遍历可变参数获取可变参数大小通过递归方式遍历可变参数通过可变参数特性来求和 遍历可变参数
#pragma oncetemplateclass ... ParamTypes
void Func(paramTypes ... param)
{}可以看作是有一个结构体里面装满了参数把结构体放到…中。就是一块内存传进去了
遇到需要遍历任意参时按下列代码执行即可 advanced.h #pragma once
#include iostream
using namespace std;templateclass T
char PrintArg(T arg)
{cout arg endl;return 0;//写上此行代码可以让(PrintArg(param),0)变为PrintArg(param
}templateclass ... ParamTypes
void Func(ParamTypes ... param)
{//std::forward()//可以把右值移到左值char arr[] { PrintArg(param)... };//展开时会出现拷贝//char arr[] {(PrintArg(param),0)... };//意思是展开param参数之后在PrintArg打印//0在此处作用位占位,展开后如下写1就用1占位//{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};//也可以写成下列代码会展开成字节码//char arr[] { param ... };
}学习.cpp #include iostream
#includeadvanced.hint main()
{int a 10;float b 20.0f;char c[] Hello;Func(a,b,c);return 0;
}输出结果 10 20 Hello
获取可变参数大小
固定语法直接写 advanced.h #pragma once
#include iostream
using namespace std;//获取长度
templateclass ... ParamTypes
void FuncLen(ParamTypes ... param)
{cout sizeof...(param)endl;
}学习.cpp #include iostream
#includeadvanced.hint main()
{int a 10;float b 20.0f;char c[] Hello;FuncLen(a, b, b);return 0;
}输出结果 3
通过递归方式遍历可变参数
牺牲可读性来换高效遍历 advanced.h #pragma once
#include iostream
using namespace std;//匹配递归遍历时的极端情况 没有参数
void FuncFindParam()
{cout 没参数了 endl;
}
//通过递归来遍历参数
templateclass T,typename ... ParamTypes
void FuncFindParam(T Head, ParamTypes ...Param)
{cout Head Head endl;FuncFindParam(Param...);//相当于一个数组去一个元素删掉一个元素最后遍历完成数组变为空
}学习.cpp #include iostream
#includeadvanced.hint main()
{int a 10;float b 20.0f;char c[] Hello;FuncFindParam(a, b, c, a, b, c);return 0;
}输出结果 Head 10 Head 20 Head Hello Head 10 Head 20 Head Hello 没参数了
通过可变参数特性来求和 advanced.h #pragma once
#include iostream
using namespace std;//输出结果
templatetypename ParamTypes
ParamTypes FunValue(ParamTypes Param)
{return Param;
}
//求和
templateclass T,typename ... ParamTypes
T FunValue(T Head,ParamTypes ... Param)
{return Head FunValueT(Param ...);
}学习.cpp #include iostream
#includeadvanced.hint main()
{int a1 10;int a2 20;int a3 30;int i FunValue(a1, a2, a3);cout i endl;return 0;
}输出结果 60