被调用的函数实例必须依赖于参数
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;
}
}
我想让函数调用依赖于参数,即调用函数的版本。我正在寻找一种方法来使以下代码正常工作,而无需使 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;
}
}