在C ++中,是否真的不可能跳过带有默认参数的模板参数,为什么语法建议否则呢?

诺里特

我一直在尝试寻找一种方法,以在其基类中已为其分配默认值的派生类中跳过不在模板参数列表末尾的模板参数。

我已经在这个主题上做过一些研究,在SO上也是如此。虽然类似的问题已经在SO讨论-许多答案基本上表明它不工作都涉及到非常特殊的情况下,像散列表的情况下在这里我也找到了“ Potatoswatter”这个答案,我认为与跳过这样一个参数的可能性相矛盾。他在回答中声称,该声明将是有效的:

template< class A, class B = int, class C >
class X;

假设确实可以不跳过模板参数(除非在参数列表的末尾),这样的声明完全没有意义。由于为B分配了一个默认值,但后面紧跟没有默认值的C,因此在这种情况下,总是必须显式分配值B,从而使int的默认分配对B完全无效。上面的X声明有意义的唯一情形是以下Y声明之一有效的情形:

class Y : public X<double, , const std::string&> { ... }

class Y : public X<A = double, C = const std::string&> { ... }

因此,派生专用类时,真的不可能跳过不在模板参数列表末尾的模板参数吗?

如果不可能的话,为什么呢?为什么法律语法显然建议这样做(请参见上面的X类示例)?

如果实际上并非不可能,那么如何跳过分配了默认值的模板参数呢?

克瑞克(Kerrek SB)

相关标准语言包含在“模板参数[temp.param]”(14.1)中。

本质上,只有在其应用的参数后面没有跟随任何没有默认参数的非压缩参数时,才可以使用默认参数([temp.param] / 11)。但是,您引用的语法在[temp.param] / 10描述的情况下可以在声明中使用:

可以使用的默认模板参数集是通过以默认函数参数(8.3.6)相同的方式合并模板的所有先前声明中的默认参数而获得的。[例子

template<class T1, class T2 = int> class A;
template<class T1 = int, class T2> class A;

相当于

template<class T1 = int, class T2 = int> class A;

结束示例]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++中带有模板的默认参数

来自分类Dev

为什么在C中不可能重载?

来自分类Dev

具有默认参数的C ++模板参数

来自分类Dev

带有MATLAB语法的c ++函数参数?

来自分类Java

为什么在C#泛型中这是不可能的?

来自分类Dev

为什么不可能从Objective-C目标文件中隐藏符号?

来自分类Dev

为什么可变参数模板在C ++中的行为如此?

来自分类Dev

在C ++中使用带有默认模板参数的模板类时出现“模板参数过多错误”

来自分类Dev

C ++ 11模板中的默认位置参数

来自分类Dev

带有指针的C ++默认参数

来自分类Dev

为什么不可能显式地默认具有volatile参数的副本构造函数?

来自分类Dev

C ++错误:函数模板中可能未使用默认模板参数

来自分类Dev

在C和C ++中,带有枚举的结构是不同的,为什么呢?

来自分类Dev

具有默认参数的C ++模板类,可能还有元编程

来自分类Dev

为什么不可能构建可以确定C ++函数是否会更改特定变量的值的编译器?

来自分类Dev

带有 1 个参数的 C++ 默认模板构造函数

来自分类Dev

为什么C ++允许使用永远无法使用的默认模板参数?

来自分类Dev

C ++中的默认参数

来自分类Dev

C ++中的模板参数

来自分类Dev

在C ++中可变参数模板中是否有对函数参数实施类型限制的好方法?

来自分类Dev

C ++-返回带有未知模板参数的模板

来自分类Dev

C ++:从模板类继承并带有可能变化的构造函数参数

来自分类Dev

C链表中不可能的结果

来自分类Dev

C ++模板元编程,带有可变参数模板以执行结构中特定成员的操作

来自分类Dev

C 程序中带有默认参数的 C++ 头文件

来自分类Java

为什么Java在c#中不使用其语言语法中的out参数?

来自分类Dev

C ++中带有指针参数的函数

来自分类Dev

C#中带有参数的属性

来自分类Dev

静态私有函数,其模板类型为C ++中的默认参数

Related 相关文章

  1. 1

    C ++中带有模板的默认参数

  2. 2

    为什么在C中不可能重载?

  3. 3

    具有默认参数的C ++模板参数

  4. 4

    带有MATLAB语法的c ++函数参数?

  5. 5

    为什么在C#泛型中这是不可能的?

  6. 6

    为什么不可能从Objective-C目标文件中隐藏符号?

  7. 7

    为什么可变参数模板在C ++中的行为如此?

  8. 8

    在C ++中使用带有默认模板参数的模板类时出现“模板参数过多错误”

  9. 9

    C ++ 11模板中的默认位置参数

  10. 10

    带有指针的C ++默认参数

  11. 11

    为什么不可能显式地默认具有volatile参数的副本构造函数?

  12. 12

    C ++错误:函数模板中可能未使用默认模板参数

  13. 13

    在C和C ++中,带有枚举的结构是不同的,为什么呢?

  14. 14

    具有默认参数的C ++模板类,可能还有元编程

  15. 15

    为什么不可能构建可以确定C ++函数是否会更改特定变量的值的编译器?

  16. 16

    带有 1 个参数的 C++ 默认模板构造函数

  17. 17

    为什么C ++允许使用永远无法使用的默认模板参数?

  18. 18

    C ++中的默认参数

  19. 19

    C ++中的模板参数

  20. 20

    在C ++中可变参数模板中是否有对函数参数实施类型限制的好方法?

  21. 21

    C ++-返回带有未知模板参数的模板

  22. 22

    C ++:从模板类继承并带有可能变化的构造函数参数

  23. 23

    C链表中不可能的结果

  24. 24

    C ++模板元编程,带有可变参数模板以执行结构中特定成员的操作

  25. 25

    C 程序中带有默认参数的 C++ 头文件

  26. 26

    为什么Java在c#中不使用其语言语法中的out参数?

  27. 27

    C ++中带有指针参数的函数

  28. 28

    C#中带有参数的属性

  29. 29

    静态私有函数,其模板类型为C ++中的默认参数

热门标签

归档