class使用类进行参数化,并使用辅助函数进行混淆

时间:2017-08-11 06:41:38

标签: c++ templates

我正在学习一些关于c ++的新概念,我正在玩它们。 我写了一些代码,这些代码在工作方式上让我感到困惑。

{{1}}

这里的想法很简单,我有一些带有列的表。然后我想创建一些只需要一些列的函数,并不关心传递的参数是否有一些额外的列。

我的困惑主要是关于代码中的点(2)和(4)......我的直觉说它应该是相同的,为什么它不是和(2)编译而(4)不是?有什么重要的话题我不知道应该阅读吗? 有没有办法实现这个特定的功能?干杯

1 个答案:

答案 0 :(得分:3)

在第二种情况下,编译器仍然推导出模板参数包的其余部分,以便获得table<aid, c> &作为函数参数。这与(4)(table<aid> &)不同。

[temp.arg.explicit]/3

  

可以推导(14.8.2)或获得的尾随模板参数   来自默认模板 - 参数可以从列表中省略   显式模板参数。尾随模板参数包   (14.5.3)未以其他方式推导出的将被推断为空序列   模板参数。如果可以推导出所有模板参数,   它们都可以省略;在这种情况下,空模板参数   列表&lt;&gt;本身也可以省略。在演绎的情况下   完成和失败,或者在没有进行演绎的情况下,如果a   指定模板参数列表,以及任何默认值   模板参数,标识单个函数模板   特化,然后template-id是函数的左值   模板专业化。