在 C++ 中打开作为构造函数参数传递的结构

Switching on structure passed as constructor parameter in C++

提问人:LPo 提问时间:9/9/2022 更新时间:9/9/2022 访问量:30

问:

我有一个配置文件头文件,其中包含在类“MyClass”中使用的静态配置。

在 class_config.h 中

typedef enum {
    SEQUENCE_1 = 5,
    SEQUENCE_2 = 8,
} Sequence;

typedef struct {
    int Position;
    Sequence FirstSequence;
    Sequence SecondSequence;   
} Map;

typedef struct {
    Map Mapping01;
    Map Mapping02;
} Config;

Config DefaultConfig {
    {
       1,
       SEQUENCE_1,
       SEQUENCE_2 
    },
    {
       2,
       SEQUENCE_2,
       SEQUENCE_2 
    },
};

在 class.h 中


Class MyClass
{
public:
   MyClass(const Config &config);
private:
   void Foo(int position);
   const Config &internal_config;
}

在类.cpp中


MyClass::MyClass(const Config &config) : internal_config(config)
{ }

void MyClass:Foo(int position)
{
  switch(position)
  {
     case internal_config.Mapping01.Position : // error : "this" cannot be used in a constant expression
         // Get : internal_config.Mapping01.SEQUENCE_1
         break;
     default:
         break;
  }
}


在我的方法“Foo”中,我想找出“位置”是否等于internal_config。Mapping01.位置internal_config。Mapping02.Position,例如返回映射的相应序列。 但是我在编译时出现以下错误:“this”不能在常量表达式中使用

我知道开关案例在构建时需要 const 表达式,但这就是我正在做的事情。使用 if else 模式而不是开关情况 one 让我很困扰。

我错过了什么吗?

C++ 结构 编译器错误 开关语句

评论

0赞 463035818_is_not_an_ai 9/9/2022
只有在构造函数调用初始化成员的值后,该成员的值才在运行时已知。为什么使用其他打扰您?internal_config
0赞 Jesper Juhl 9/9/2022
你可以放弃 s.C++ 不是 C。typedef
0赞 Sté 9/9/2022
case 语句需要整数值,该值必须在编译时已知。
1赞 Sté 9/9/2022
@LPo恕我直言,不能在编译时进行评估,这同样适用于其属性。
1赞 Sté 9/9/2022
@LPo也许策略模式适合这里。

答: 暂无答案