-2

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

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

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

4

1 回答 1

2

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

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

于 2021-11-05T21:42:41.687 回答