首页 > 解决方案 > 被调用的函数实例必须依赖于参数

问题描述

我想让函数调用取决于参数,即调用的是什么版本的函数。我正在寻找一种方法来使以下代码工作,而无需制作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>
{}

随意问我是否需要详细说明。

标签: c++14template-meta-programmingsfinaeoverload-resolution

解决方案


我正在寻找一种方法来使以下代码工作,而不使 enum_value va 模板参数

我认为你想要什么是不可能的。

正如 Quentin 所指出的,如果枚举值是一个函数参数,那么它(可能)只在运行时是已知的。但是编译器必须选择函数编译时。

您可以认为 makefoo() constexprconstexpr值作为参数传递,允许在编译时选择正确的函数。但这不起作用,因为constexpr函数可以在编译时执行,但也可以在运行时执行。所以编译器给出错误是因为必须考虑运行时的情况。

我能想象的最好的(不是一个很好的解决方案,我知道)是通过一个选择函数;某事作为

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;             
    }
 }

推荐阅读