gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 09:30:59 25 4
gpt4 key购买 nike

下面的代码在两个 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>();
}

关于c++ - 在 constexpr 分支中使用枚举类值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69167215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com