Thread的主要数据成员为_Thr
里面存储的是线程句柄和线程ID
先看看赋值运算符的移动构造
最开始判断线程的ID是否不为0
_STD就是使用std的域
如果线程ID不为0,那么就抛出异常
这里_New_val使用了完美转发,交换_Val和_New_val的值
_Thr = _STD exchange(_Other._Thr, {});
这里应该是把_Other._Thr的值赋值给_Thr,然后将_Other._Thr的值置空
最后返回线程本身
第一个判断我们已经看了,就是判断_Thr_Id != 0
如果_Thr_Id == 0了,则抛出异常
第二个我看了_Thrd_id()其实就是一个unsigned int,但是具体是什么我不知道,ID出问题了会抛出异常吧
第三个,是线程启动不成功,则抛出异常
主要这里是_Thrd_detach的调用,使得线程分离
这里也用了完美转发,也是Thread的构造函数
enable_if_t:
这里必须要模板参数为整形才能调用isInt
参考文章:C++(11):enable_if_t-CSDN博客
std::is_same_v:判断输入的类型是否是指定的模板类型
_Start函数内,就把函数和参数信息给到了_Thr._Hnd线程句柄上去了
定义类,还可以这么去玩