1

下面的代码打印val2在两个f()调用上。f()根据枚举值执行特定分支的正确方法是什么?

enum class E
{
    val1,
    val2
};

using val1_t = std::integral_constant<E, E::val1>;
using val2_t = std::integral_constant<E, E::val2>;
    

template <typename T>
void f(T t)
{
    if constexpr (std::is_same_v<T, val1_t>)
    {
        std::cerr << "val1\n";
    }
    else
    {
        std::cerr << "val2\n";
    }
}


int main()
{
    f(E::val1);
    f(E::val2);
}
4

1 回答 1

7

如果将枚举移动到模板参数中,则可以使用

template <E val>
void f()
{
    if constexpr (val == E::val1)
    {
        std::cerr << "val1\n";
    }
    else
    {
        std::cerr << "val2\n";
    }
}

你会像这样使用它

int main()
{
    f<E::val1>();
    f<E::val2>();
}
于 2021-09-13T18:07:38.210 回答