【问题标题】:Why that partial template specialization is allowed?为什么允许部分模板特化?
【发布时间】:2019-04-25 08:31:35
【问题描述】:

我查看了部分模板专业化参数列表并偶然发现了这样一个示例

template <typename>
class function;
template <typename ReturnValue, typename Args,typename Args2>
class function<ReturnValue(Args,Args2)>
{
    //smth
};

ReturnValue(Args,Args2) 到底是什么意思(因为它不是我所知道的类型),我可以根据什么规则编写类似的东西?

谢谢

【问题讨论】:

  • 这是function signature template。详情其实可以在这个book
  • ReturnValue(Args,Args2) 一个类型(一个函数返回类型ReturnValue并接受ArgsArgs2类型的两个参数)。

标签: c++


【解决方案1】:

因为它不是我所知道的类型

其实是这样的。 ReturnValue(Args,Args2) 是“采用ArgsArg2 并返回ReturnValue 的函数”类型。举个例子:

void foo(int, char);
typedef void FunctionType(int, char);

这里FunctionType确实是void(int, char)的类型,也是foo的类型。

【讨论】:

  • 但是为什么我不能像这样修改上面的例子:class function&lt;ReturnValue(Args),Args2&gt;
  • @Poarthur 因为function一个 模板参数,而您将传递 两个 参数:ReturnValue(Args) 类型和输入Args2
猜你喜欢
  • 2011-02-02
  • 2013-09-05
  • 2019-05-20
  • 1970-01-01
  • 2011-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多