Walton1128/CPP-Templates-2nd--

有人知道 这个语法在哪边有说明吗 class function<_Res(_ArgTypes...)>

Closed this issue · 3 comments

  template<typename _Res, typename... _ArgTypes>
    class function<_Res(_ArgTypes...)>

这个定义 里面 class function后面的 "<_Res(_ArgTypes...) “,从语法上讲,属于哪个部分。
哪里有讲为什么可以这么写。

有人跟我说这个是偏特化。但是我看特化里面。。这里应该是指定特化的,特别格式 。比如说某个模板参数是什么,应该跟析板参数 对应的。
他这个好像指出了模板参数的组织形式。(ps:我知道 他是为指明一个函数形式(signature))

讲知道 的大神指导一下

这里试想一下,下面的两种定义有什么差别

template<typename _Res, typename... _ArgTypes>
    class function<_Res(_ArgTypes...)>
std::function<int(int)> 

template<typename _Res, typename... _ArgTypes>
    class function
std::function<int, int> 

他们应该可以准确的推出模板 的参数。

我想这里只是通过偏特化,限定了我们给出模板实参的形式。(我们要以函数签名的形式给出)

原来的理解是 偏特化参数表,是以逗号的形试给出模板参数 的特别形式。
不知道 哪里有解释可以用别的形式(比如这里的函数类型),是不是我们也可以用别的形式比如(?:)(这里只是说他可以有很多形式)

刚在里面有找到了一个定义

  template<typename _Signature>
    class function;

 template<typename _Res, typename... _ArgTypes>
    class function<_Res(_ArgTypes...)>

后面的这个定义 应该是在前面定义 的基础上的再定义 。
模板的多重封装定义(我自己起的名字) 。
_Res(_ArgTypes...) ==> _Signature

从上面一个 到下面一个。。是个偏特化。
把 signature 限定在“函数类型”、