`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...)
。后者看起来像是一个带有可变数量参数的函数调用。但是,如果 _Res
是 void
并且 _ArgTypes
是 int
,我们会得到 void(int)
:这对我来说没有意义,因为我们没有函数命名为 void
并向其传递参数 int
(??)。这是一种特别支持的语法吗?你能澄清一下吗?
我认为您对声明语法(继承自 C 语言)感到困惑:在这里,语法 void(int)
而不是 意味着名为 void
并调用一个名为 int
的参数。相反,它表示一个 type,它是一个函数,接受类型 int
的参数并返回 void
.
您可以在 C++ Reference 阅读更多关于函数声明语法的信息,还有一些示例。
gcc中std::function
的代码有这两行:
template<typename _Res, typename... _ArgTypes>
class function<_Res(_ArgTypes...)> // <-- unclear to me
第一部分template... _ArgTypes
表示一个“参数包”,即可变数量的模板参数;这很清楚。但是第二行很神奇。
OK,写class function<SmthHere>
就是模板特化,所以我们特化classfunction
用_Res(_ArgTypes...)
。后者看起来像是一个带有可变数量参数的函数调用。但是,如果 _Res
是 void
并且 _ArgTypes
是 int
,我们会得到 void(int)
:这对我来说没有意义,因为我们没有函数命名为 void
并向其传递参数 int
(??)。这是一种特别支持的语法吗?你能澄清一下吗?
我认为您对声明语法(继承自 C 语言)感到困惑:在这里,语法 void(int)
而不是 意味着名为 void
并调用一个名为 int
的参数。相反,它表示一个 type,它是一个函数,接受类型 int
的参数并返回 void
.
您可以在 C++ Reference 阅读更多关于函数声明语法的信息,还有一些示例。