c++14 - 被调用的函数实例必须依赖于参数
问题描述
我想让函数调用取决于参数,即调用的是什么版本的函数。我正在寻找一种方法来使以下代码工作,而无需制作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>
{}
随意问我是否需要详细说明。
解决方案
我正在寻找一种方法来使以下代码工作,而不使 enum_value va 模板参数
我认为你想要什么是不可能的。
正如 Quentin 所指出的,如果枚举值是一个函数参数,那么它(可能)只在运行时是已知的。但是编译器必须选择函数编译时。
您可以认为 makefoo()
constexpr
将constexpr
值作为参数传递,允许在编译时选择正确的函数。但这不起作用,因为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;
}
}
推荐阅读
- reactjs - 在 Jest / jsdom / React 测试库中触发键盘事件未按预期工作
- java - 无法使用 JpaRepository 执行更新
- python - 用其他数据框中的值替换值
- html - 调整特定宽度的大小时,如何使左侧边栏响应顶部导航栏
- php - 字符串拆分 PHP
- python - Pygame中的连续运动
- python - Django 的 appname 可以与其模型名称相同
- amazon-ec2 - AWS IAM 角色:仅对实例本身而不是每个资源具有权限的策略
- file-io - ftell/fseek 在接近文件末尾时失败
- javascript - 如何在表格中按顺序输入数字?