在C ++中是否可以在开关范围之外声明变量?

简而言之,请考虑以下(伪)代码:

switch (n) {
    case 15:
        (keyword) customtemplate<15> t_var; /* I want it to be outside of switch */
        break;
    case 255:
        (keyword) customtemplate<255> t_var; /* I want it to be outside of switch */
        break;
    default:
        break;
}

t_var.do_something();

我想知道是否有一些(keyword)使跟随变量成为全局变量,或者不在切换用例范围之内。

我想要这样一个奇怪的代码的原因是,我无法声明具有任意数量n的模板变量,即:

int n = 15; // or int n = 255;
custometemplate<n> t_var; /* I can't do this */
t_var.do_something;

customtemplate这个帖子中提到的是实际上可以RS<n,k>ezpwd -里德-所罗门我要声明RS<n, k>这是一个RS<15,2>RS<15, 4>RS<15, 7>RS<15, 11>RS<64, 32>RS<160, 128>

克劳斯

简单回答是不”!

在您的情况下,不同的模板实例就是不同的类型。

如果您可以做您想做的事,那么问题就出在如何处理这个任何类型的实例上。您以后如何使用此变量?

切记:创建模板实例是在编译时完成的!在运行时完成开关盒的运行。

您的代码产生与以下内容相同的问题:

switch (foo)
{
    case 1:
       int bar;
       break;

    case 2:
       float bar;
       break;
 }

 ??? and now how the compiler should handle two different types ???

再次:模板实例是不同的类型!

正如其他人已经在这里提到的那样,您可以使用一种变体类型,它仅包含给定类型列表的一个实例。它还包含一个信息,该信息实际上存储在此变量实例中。

但是我更喜欢使用可用的实现而不是编写自己的实现。为此,请参见Boost Variant http://www.boost.org/doc/libs/1_58_0/doc/html/variant.html

但是作为我的经验的简历:如果您认为需要一种变体类型,则可以充分证明您的设计。提示:如果您需要一个变体类型,以后您会在每次处理此变体时看到您必须检查实际内容。我认为这通常是违反良好的OOP设计的。它可以提供帮助,但我认为应该避免!

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在 C 中声明循环/IF 结构之外的变量

来自分类Dev

在C函数中声明的函数是否可以在全局范围内使用?

来自分类Dev

是否可以在C ++中声明两个变量For-Each Loop?

来自分类Dev

是否可以在循环中自动声明变量?C#

来自分类Dev

是否可以在C ++中的联合中声明匿名实例?

来自分类Dev

在C / C ++中声明变量

来自分类Dev

实例变量声明的顺序在Objective-C中是否重要?

来自分类Dev

字符变量在C中可以保留什么值范围?

来自分类Dev

字符变量在C中可以保留什么值范围?

来自分类Dev

C语言中的变量声明和范围

来自分类Dev

在实例范围之外,从单独的std :: function变量调用C ++中的绑定派生类方法

来自分类Dev

在C#(.NET)中范围变量是否可能

来自分类Dev

是否可以在C ++中添加到类范围?

来自分类Dev

在C和C ++中,“变量未在此范围内声明”

来自分类Dev

可以更改的const变量可以用于在C和C ++中声明和定义数组吗?

来自分类Dev

C mingw中的变量声明

来自分类Dev

Visual Basic是否曾经限制过像C90这样可以声明变量的位置?

来自分类Dev

是否可以在c ++中将元素与数组中除自身之外的每个元素进行比较?

来自分类Dev

是否可以在C ++中为变量使用动态名称

来自分类Dev

是否可以在C ++中显式实例化临时变量?

来自分类Dev

是否可以在C中创建“变量”标头保护名称?

来自分类Dev

是否可以比较C中相同变量的字符串?

来自分类Dev

在 C++ 中是否可以根据名称访问变量(内省)

来自分类Dev

是否可以在 C 变量中“关闭”或“打开”波动性?

来自分类Dev

混淆C中变量的范围

来自分类Dev

C ++中的嵌套函数声明的范围

来自分类Dev

是否可以在C ++ / CLR中实现用C#声明的抽象类?

来自分类Dev

我们可以在C中的#define指令中声明变量吗?

来自分类Dev

在C ++ 11中是否可以在一行中声明和传递数组?

Related 相关文章

  1. 1

    在 C 中声明循环/IF 结构之外的变量

  2. 2

    在C函数中声明的函数是否可以在全局范围内使用?

  3. 3

    是否可以在C ++中声明两个变量For-Each Loop?

  4. 4

    是否可以在循环中自动声明变量?C#

  5. 5

    是否可以在C ++中的联合中声明匿名实例?

  6. 6

    在C / C ++中声明变量

  7. 7

    实例变量声明的顺序在Objective-C中是否重要?

  8. 8

    字符变量在C中可以保留什么值范围?

  9. 9

    字符变量在C中可以保留什么值范围?

  10. 10

    C语言中的变量声明和范围

  11. 11

    在实例范围之外,从单独的std :: function变量调用C ++中的绑定派生类方法

  12. 12

    在C#(.NET)中范围变量是否可能

  13. 13

    是否可以在C ++中添加到类范围?

  14. 14

    在C和C ++中,“变量未在此范围内声明”

  15. 15

    可以更改的const变量可以用于在C和C ++中声明和定义数组吗?

  16. 16

    C mingw中的变量声明

  17. 17

    Visual Basic是否曾经限制过像C90这样可以声明变量的位置?

  18. 18

    是否可以在c ++中将元素与数组中除自身之外的每个元素进行比较?

  19. 19

    是否可以在C ++中为变量使用动态名称

  20. 20

    是否可以在C ++中显式实例化临时变量?

  21. 21

    是否可以在C中创建“变量”标头保护名称?

  22. 22

    是否可以比较C中相同变量的字符串?

  23. 23

    在 C++ 中是否可以根据名称访问变量(内省)

  24. 24

    是否可以在 C 变量中“关闭”或“打开”波动性?

  25. 25

    混淆C中变量的范围

  26. 26

    C ++中的嵌套函数声明的范围

  27. 27

    是否可以在C ++ / CLR中实现用C#声明的抽象类?

  28. 28

    我们可以在C中的#define指令中声明变量吗?

  29. 29

    在C ++ 11中是否可以在一行中声明和传递数组?

热门标签

归档