在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 条评论
登录 后参与评论

相关文章

是否可以确定符号在C中是变量还是函数?

是否可以在标准C ++中打印变量的类型?

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

在C / C ++中声明变量

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

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

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

在类范围内声明时,如何在C ++ 14中引用变量模板?

在C ++中的给定相同范围内声明相同的变量名称

开关变量声明的范围如何?

设置指向在C中局部范围中声明的变量的指针

C ++-可以在标头之外声明类函数吗?

在C中是否需要变量声明?

在C中的块范围内的变量声明之后使用goto

访问C ++中局部声明隐藏的封闭范围(非全局)中的变量?

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

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

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

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

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

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

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

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

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

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

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

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

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

是否可以在 C++ 中创建类型声明数组?