`class function<_Res(_ArgTypes...)>` 是什么意思?

What does `class function<_Res(_ArgTypes...)>` mean?

gcc中std::function的代码有这两行:

template<typename _Res, typename... _ArgTypes>
  class function<_Res(_ArgTypes...)> // <-- unclear to me

第一部分template... _ArgTypes表示一个“参数包”,即可变数量的模板参数;这很清楚。但是第二行很神奇。 OK,写class function<SmthHere>就是模板特化,所以我们特化classfunction_Res(_ArgTypes...)。后者看起来像是一个带有可变数量参数的函数调用。但是,如果 _Resvoid 并且 _ArgTypesint,我们会得到 void(int):这对我来说没有意义,因为我们没有函数命名为 void 并向其传递参数 int (??)。这是一种特别支持的语法吗?你能澄清一下吗?

我认为您对声明语法(继承自 C 语言)感到困惑:在这里,语法 void(int) 而不是 意味着名为 void 并调用一个名为 int 的参数。相反,它表示一个 type,它是一个函数,接受类型 int 的参数并返回 void.

您可以在 C++ Reference 阅读更多关于函数声明语法的信息,还有一些示例。