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,4
getchar();
// forward<int >(a);
}