参数完美转发"/>
c++可变参数完美转发
c++语法真的怪异
看线程源码的时候看到一段
template<class _Fn,class... _Args>explicit thread(_Fn&& _Fx, _Args&&... _Ax){ // construct with _Fx(_Ax...)_Launch(&_Thr,_STD bind(_Decay_copy(_STD forward<_Fn>(_Fx)),_Decay_copy(_STD forward<_Args>(_Ax))...));//后面三个...是干嘛的?难道这个方法的返回值是可变参数然后传递给
_Decay_copy()?
}
一直看不懂什么意思.....原来就是一个完美转发的包装模板,返回值其实就是可变参数,自己写了代码测试了下。
#include <iostream>using namespace std;
template<typename T>
void printarg(T t)
{cout << t ;
}
template<typename ...Ts>
void go(Ts...agv){gogo(forward<Ts>(agv)...); // go->gogo 可变参数转发需要...}
template<typename ...Ts>
void gogo(Ts...agvs){int arr[] = { (printarg(agvs), 0)... }; //->printarg返回值赋给0,0=返回值,最后值再进入数组;
}int main()
{int a = 0;go(1,2,3,4);//go把可变参数转发给gogo 然后gogo调用printarg()输出1,2,3,4getchar();
// forward<int >(a);}
更多推荐
c++可变参数完美转发
发布评论