c++ - 在 constexpr 分支中使用枚举类值

下面的代码在两个 f() 调用上都打印了 val2。根据枚举值在 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);
}

最佳答案

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

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

https://stackoverflow.com/questions/69167215/

相关文章:

c++ - 如何获取属于某个范围的 vector 中的最大元素?

docker - 使用 deps.edn 在容器中安装依赖项

python - Azure Databricks python 命令显示当前集群配置

html -

  • 上的背景图像变为背景而不是列表元素符号

    laravel - Laravel 中的 getClientOriginalExtension()

    c - 栈在使用Pthread的多线程程序中是如何工作的?

    android - 从协程(kotlin)切换到隔离(dart)

    python - 如何找到中轴的关节和端点

    c++ - 如何在给定输入的数字中找到最大的数字?

    java - 为什么 java 编译器不提示 "\s"?