【问题标题】:What does it mean that function parameter packs are always pack expansions, so their declared types must include at least one parameter pack?函数参数包总是包扩展是什么意思,所以它们声明的类型必须至少包含一个参数包?
【发布时间】:2021-06-30 18:12:59
【问题描述】:

在这个sn-p中

template<typename... Types>
void f(Types ... args);

Types模板参数包args函数参数包

关于这两个技术术语,C++ Templates - The Complete Guide 2nd Edition 表示

与模板参数包不同,函数参数包始终是包扩展,因此其声明的类型必须至少包含一个参数包。

这是什么意思?非至少一个的例子是什么,即在那个句子的上下文中为零?

【问题讨论】:

  • 零是不可能的,正如句子所说,它必须至少是一个......所以没有例子。
  • @JohannesSchaub-litb,您会说x =; 不是缺少 RHS 的作业示例吗?它是。这是错误的代码,但仍然是一个有效的例子来说明在分配中缺少 RHS 意味着什么。

标签: c++ templates c++17 variadic-templates template-meta-programming


【解决方案1】:

它说函数参数包只能使用另一个参数包创建,而不是从头开始。

在那个句子的上下文中,非至少一个,即零的例子是什么?

例如int ...params 是非法的,因为它不包含任何现有的包。

【讨论】:

  • 并且“int...”与“Types...”都是有效的,但是一个创建C varargs函数,另一个创建一个未命名的函数参数包。
猜你喜欢
  • 1970-01-01
  • 2015-09-13
  • 2018-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多