Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ ENUM-C+的布尔控制内容+;_C++_Enums_Boolean - Fatal编程技术网

C++ ENUM-C+的布尔控制内容+;

C++ ENUM-C+的布尔控制内容+;,c++,enums,boolean,C++,Enums,Boolean,我有一个方法参数的枚举。此枚举是类的私有成员,例如 class Method 这种方法有两种变体。参数列表几乎相同。对于方法的第二种变体,将在第一种变体的参数列表中附加3个参数 我想用一个布尔值来做,对于第二个变量,它被设置为true。有没有可能有这样的东西: enum EcolId { P1, P2, P3, if(m_bool) { P4, P5 } } enum EcolId1 { P1,

我有一个方法参数的枚举。此枚举是类的私有成员,例如

class Method
这种方法有两种变体。参数列表几乎相同。对于方法的第二种变体,将在第一种变体的参数列表中附加3个参数

我想用一个布尔值来做,对于第二个变量,它被设置为true。有没有可能有这样的东西:

enum EcolId {
    P1,
    P2,
    P3,

    if(m_bool)
    {
         P4,
         P5
    }
}
enum EcolId1
{
    P1,
    P2,
    P3,
};

enum EcolId2
{
    P1,
    P2,
    P3,
    P4,
    P5,
};


template<typename T>
class Method
{
     T enumvar;
     ... 
}

...
Method<EcolId1>  limited;
Method<EcolId2>  more;     
如果没有,我该怎么办

我别无选择,只能在这里使用枚举


谢谢

取决于变体的动机

为什么不使用两个
enum
s

或者,当使用未处理的值时,可以在第一个变量中生成错误


让我有点恼火的是,你谈论的参数列表被扩展了。我希望您指的是要扩展的某个参数的值列表。

不,您不能这样做

你可以做:

 enum EcolId {
     P1,
     P2,
     P3,

 #ifdef SOMETHING
     P4,
     P5
 #endif 
 }
或者,您可以使用模板。大概是这样的:

enum EcolId {
    P1,
    P2,
    P3,

    if(m_bool)
    {
         P4,
         P5
    }
}
enum EcolId1
{
    P1,
    P2,
    P3,
};

enum EcolId2
{
    P1,
    P2,
    P3,
    P4,
    P5,
};


template<typename T>
class Method
{
     T enumvar;
     ... 
}

...
Method<EcolId1>  limited;
Method<EcolId2>  more;     
enum EcolId1
{
P1,
P2,
P3,
};
enum EcolId2
{
P1,
P2,
P3,
P4,
P5,
};
模板
类方法
{
T enumvar;
... 
}
...
方法有限公司;
方法更多;

是否使用两种不同的枚举?或者两个不同的类,可能继承自一个公共基类,每个类都有正确的枚举成员?是否有一个枚举并验证函数的输入?使用多态性可以更好地解决这个问题,但我们需要更多的细节来建议一个合理的解决方案。这可能有助于@aleguna,谢谢,但是我想在一个类中使用这个2变量枚举,因为我的设计是一个类和一个计算方法,标志设置为variant 1或variant 2i,就像第一个解决方案一样。什么东西?全局变量?它应该在哪里定义,但也应该设置为true或false?我想在构造函数中初始化这个变量,其中一个参数是控制枚举的布尔值的bool值。可以这样做吗?不,您必须使用#define,它必须在编译时知道。谢谢。我可以这样做吗:在.h文件的某个地方,
#define STHG true
。然后构造函数
Method::Method(bool b){STHG=b;}
?我想这是个坏主意,因为它在编译时是未知的,然后第二个解决方案是解决我的问题的唯一方法。我用一个枚举和代码其他部分的技巧解决了另一种方法,这样非种子参数就不会受到影响。无论如何谢谢你