被调用的函数实例必须依赖于参数

Called function instance must depend on parameter

我想让函数调用依赖于参数,即调用函数的版本。我正在寻找一种方法来使以下代码正常工作,而无需使 enum_value v 成为模板参数。目标是如果v==enum_value::A,调用第一个实例。如果 v==enum_value::B 必须调用第二个实例。

enum class enum_value { A, B, C };

auto foo(enum_value v) -> std::enable_if_t<v==enum_value::A>
{}

auto foo(enum_value v) -> std::enable_if_t<v==enum_value::B>
{}

欢迎询问我是否需要详细说明。

I'm looking for a way to make the following code work, without making enum_value v a template argument

我不认为你想要什么。

正如 Quentin 所指出的,如果枚举值是一个函数参数,则它(可能)仅 运行 次已知。但是编译器必须 select 函数编译时。

你可以认为 make foo() constexpr,将 constexpr 值作为参数传递,允许编译时 select 离子的正确功能。但这行不通,因为 constexpr 函数可以在编译时执行,但也可以在 运行 时执行。所以编译器给出错误,因为必须考虑 运行 时间的情况。

我能想象的最好的(我知道这不是一个很好的解决方案)是通过 select 函数;像

enum class enum_value { A, B, C };

void foo_A ()
 { }

void foo_B ()
 { }

// ....

void select_foo (enum_value v)
 {
   switch (v)
    {
      case A: foo_A(); break;
      case B: foo_B(); break;
      // ...
      default: break;             
    }
 }