g ++ std :: is_function实现:什么是_ArgTypes ......?

Bri*_*ian 8 c++ templates g++ variadic-templates c++11

我正在查看我的标题(g ++ - 4.5.2)中的一些模板的实现,我发现了以下内容:

/// is_function
template<typename>
  struct is_function
  : public false_type { };
template<typename _Res, typename... _ArgTypes>
  struct is_function<_Res(_ArgTypes...)>
  : public true_type { };
template<typename _Res, typename... _ArgTypes>
  struct is_function<_Res(_ArgTypes......)>
  : public true_type { };
Run Code Online (Sandbox Code Playgroud)

前两个声明似乎是合理的,但我无法弄清楚第三个如何工作.什么是......?我在标准中寻找它,但找不到任何东西.

GMa*_*ckG 6

它与以下相同:

_Res(_ArgTypes..., ...)
Run Code Online (Sandbox Code Playgroud)

省略号参数之前的逗号是可选的.

  • @BrianBi:想象一下你把'printf`传给了这个.`_ArgTypes`将保存`const char*`,最后的`...`需要匹配,因为没有类型代表它. (3认同)
  • *"省略号参数前的逗号是可选的"* - 什么?惊人!+1 (2认同)