Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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++ C++;枚举(更好的枚举)和类型之间的映射类型/功能_C++_Templates_Types_Enums - Fatal编程技术网

C++ C++;枚举(更好的枚举)和类型之间的映射类型/功能

C++ C++;枚举(更好的枚举)和类型之间的映射类型/功能,c++,templates,types,enums,C++,Templates,Types,Enums,我正在使用 在更好的枚举值和更好的枚举类型/功能之间具有1:1映射 比如说 更好的枚举A[a1,a2] 更好的枚举B1 更好的枚举B2 因此,逻辑映射是: A::a1映射到B1类型 A:a2映射到B2类型 显然,上面的示例大小为2,但实际代码必须支持其增长 因此,为了支持此映射,基本上使用了如下switch case,但此代码很难维护和扩展: bool Execute1(A a_val) { switch (a_val) { case A::a1:

我正在使用
在更好的枚举值和更好的枚举类型/功能之间具有1:1映射
比如说

  • 更好的枚举A[a1,a2]
  • 更好的枚举B1
  • 更好的枚举B2
因此,逻辑映射是:

  • A::a1映射到B1类型
  • A:a2映射到B2类型
显然,上面的示例大小为2,但实际代码必须支持其增长
因此,为了支持此映射,基本上使用了如下switch case,但此代码很难维护和扩展:

bool Execute1(A a_val)
{
    switch (a_val)
    {
    case A::a1:
        return execute1<B1>();
    case A::a2:
        return execute1<B2>();
    default:
        break;
    }

    return false;
}

int Execute2(A a_val)
{
    switch (a_val)
    {
    case A::a1:
        return execute2<B1>();
    case A::a2:
        return execute2<B2>();
    default:
        break;
    }

    return 0;
}
bool Execute1(一个值)
{
开关(a_val)
{
案例A::a1:
返回execute1();
案例A::a2:
返回execute1();
违约:
打破
}
返回false;
}
int Execute2(A_val)
{
开关(a_val)
{
案例A::a1:
返回execute2();
案例A::a2:
返回execute2();
违约:
打破
}
返回0;
}

有什么想法可以概括这种映射,并使用一些不需要上述开关/案例的设计模式吗?

您如何使用
a1
a2
?运行时变量或constexpr变量?由用户给定,它不是constexpr,“Execute”方法在被调用时获取任意值。看起来已经有类似的问题了
bool Execute1(A a_val)
{
    switch (a_val)
    {
    case A::a1:
        return execute1<B1>();
    case A::a2:
        return execute1<B2>();
    default:
        break;
    }

    return false;
}

int Execute2(A a_val)
{
    switch (a_val)
    {
    case A::a1:
        return execute2<B1>();
    case A::a2:
        return execute2<B2>();
    default:
        break;
    }

    return 0;
}