在case中切换成员变量为的case语句
Switch case statement with member variable in case
我正试图找到一种方法,在case部分使用成员变量来评估switch
-case
语句。我认为有一个像下面这样的全局静态变量可以作为const表达式。
不幸的是,编译器告诉我相反的情况:
error: ‘ll’ cannot appear in a constant-expression
error: ‘.’ cannot appear in a constant-expression
有什么关键词或任何东西可以让这个想法发挥作用吗?我不是C++11的专家,我听说过constexpr
。
enum MyEnum2 {A=0, B=1};
class Test{
public:
operator MyEnum2 () { return val_;}
Test(MyEnum2 val) :val_(val) {}
Test() {}
static const MyEnum2 A;
static const MyEnum2 B;
MyEnum2 val_;
};
const MyEnum2 Test::A(MyEnum2::A);
const MyEnum2 Test::B(MyEnum2::B);
static const Test ll;
int main() {
class Test v = ll.A;
cout << v << endl;
switch(v) {
case ll.A:
cout << "A" << endl;
break;
case ll.B:
cout << "B" << endl;
break;
}
}
静态元素是类的一部分,而不是实例的一部分。所以你必须写:
case Test::A:
因为case表达式中的值必须是常量表达式,所以也可以使用constexpr方法如下:
class A
{
public:
constexpr int X() { return 42; }
};
int main()
{
int i=42;
A a;
switch (i)
{
case a.X():
;
}
}
编辑以回答问题:
您可以创建一个类的constexpr对象,该对象可以实例化为constexpr,它只需要一个constexpr构造函数,如下所示:
#include <iostream>
using namespace std;
const int i = 9; // using a const variable as compile time const
class Y // using a class containing const vals
{
public:
int i;
constexpr Y(int _i): i(_i){}
};
constexpr Y y(100);
int main()
{
int var=9;
switch (var)
{
case i:
;
case y.i:
;
}
}
但我看不到任何真正的用例用于这种编程。switch语句不能与其他实例一起"重用",因为不能为switch表达式提供其他常量"对象"以使其行为不同。所以你只是用一种非常特殊的方式隐藏你的常数值,这对其他人来说可能不太好阅读。
你能给我们你的用例吗?
只需将枚举包含在类中即可。您将获得相同的语法,枚举是定义,因此默认情况下为const。
#include <iostream>
using namespace std;
class Test {
public:
enum MyEnum2 {
A,
B
};
Test(Test::MyEnum2 type) {
this->type = type;
}
MyEnum2 type;
};
int main() {
Test t = Test(Test::A);
switch (t.type) {
case (Test::A):
cout << "A" << endl;
break;
case (Test::B):
cout << "B" << endl;
break;
}
}
在Test类中添加一个强制转换运算符作为运算符int(),以便Test对象的类型被强制转换为int
相关文章:
- 我的简单if-else语句是如何无法访问的代码
- switch-case语句如何在Arduino/C++中工作
- 一个'case'在简单的'switch'语句中不起作用
- 为什么您可以在 switch 语句中的"默认"下定义变量,而不能在"case"下定义变量
- 使用枚举关闭switch/case语句的编译器警告
- 为什么case语句中的标签应该是常量
- 在case语句中使用{}.为什么?
- 在 switch 语句中使用向量时"Jump to case label"错误。
- 在开关案例语句中,它说"duplicate case value"出现错误。有人知道为什么吗?
- OpenGL: Case语句和顺序中的错误
- c++访问器mutator未读取cin-switch case语句
- 我如何告诉gcc在switch/case语句上警告(或失败)而不中断?
- 不能从switch case语句传递构造函数的参数
- c++变量初始化在SWITCH语句中DEFAULT之后的CASE内
- 如何在c++中循环一次要求输入的switch-case语句?
- switch case语句中的循环
- 在case中切换成员变量为的case语句
- 为什么在switch case语句中只允许有限的类型?
- 可以用case范围切换语句吗?
- Switch case语句如何在内部实现或工作