有人知道 这个语法在哪边有说明吗 class function<_Res(_ArgTypes...)>
Closed this issue · 3 comments
standback commented
template<typename _Res, typename... _ArgTypes>
class function<_Res(_ArgTypes...)>
这个定义 里面 class function后面的 "<_Res(_ArgTypes...) “,从语法上讲,属于哪个部分。
哪里有讲为什么可以这么写。
有人跟我说这个是偏特化。但是我看特化里面。。这里应该是指定特化的,特别格式 。比如说某个模板参数是什么,应该跟析板参数 对应的。
他这个好像指出了模板参数的组织形式。(ps:我知道 他是为指明一个函数形式(signature))
讲知道 的大神指导一下
Walton1128 commented
我理解这就是“偏特化”。 _Res(_ArgTypes...) 指明的是函数类型(参见https://stackoverflow.com/questions/17446220/c-function-types),偏特化也只能通过类型或者非类型参数进行偏特化。
standback commented
这里试想一下,下面的两种定义有什么差别
template<typename _Res, typename... _ArgTypes>
class function<_Res(_ArgTypes...)>
std::function<int(int)>
template<typename _Res, typename... _ArgTypes>
class function
std::function<int, int>
他们应该可以准确的推出模板 的参数。
我想这里只是通过偏特化,限定了我们给出模板实参的形式。(我们要以函数签名的形式给出)
原来的理解是 偏特化参数表,是以逗号的形试给出模板参数 的特别形式。
不知道 哪里有解释可以用别的形式(比如这里的函数类型),是不是我们也可以用别的形式比如(?:)(这里只是说他可以有很多形式)
standback commented
刚在里面有找到了一个定义
template<typename _Signature>
class function;
template<typename _Res, typename... _ArgTypes>
class function<_Res(_ArgTypes...)>
后面的这个定义 应该是在前面定义 的基础上的再定义 。
模板的多重封装定义(我自己起的名字) 。
_Res(_ArgTypes...) ==> _Signature
从上面一个 到下面一个。。是个偏特化。
把 signature 限定在“函数类型”、