我正在学习一些关于c ++的新概念,我正在玩它们。 我写了一些代码,这些代码在工作方式上让我感到困惑。
{{1}}
这里的想法很简单,我有一些带有列的表。然后我想创建一些只需要一些列的函数,并不关心传递的参数是否有一些额外的列。
我的困惑主要是关于代码中的点(2)和(4)......我的直觉说它应该是相同的,为什么它不是和(2)编译而(4)不是?有什么重要的话题我不知道应该阅读吗? 有没有办法实现这个特定的功能?干杯
答案 0 :(得分:3)
在第二种情况下,编译器仍然推导出模板参数包的其余部分,以便获得table<aid, c> &
作为函数参数。这与(4)(table<aid> &
)不同。
可以推导(14.8.2)或获得的尾随模板参数 来自默认模板 - 参数可以从列表中省略 显式模板参数。尾随模板参数包 (14.5.3)未以其他方式推导出的将被推断为空序列 模板参数。如果可以推导出所有模板参数, 它们都可以省略;在这种情况下,空模板参数 列表&lt;&gt;本身也可以省略。在演绎的情况下 完成和失败,或者在没有进行演绎的情况下,如果a 指定模板参数列表,以及任何默认值 模板参数,标识单个函数模板 特化,然后template-id是函数的左值 模板专业化。