我需要使用辅助函数检查 T 类型的值是否是其任何参数。
例如,使用类似以下代码的内容
enum class my_enum{k1, k2, k3, k4, k5};
auto v{my_enum::k1};
if (is_any_of(v, my_enum::k1, my_enum::k4, my_enum::k5)) {
}
而不是使用 if (v == my_enum::k1 || v == my_enum::k4 || v== my_enum::k5) {}
或使用 switch-案例
。
如何在 C++11 中实现可变参数函数 bool is_any_of()
?
使用 C++17 折叠表达式如何使实现变得更简单?
最佳答案
这将在 C++11 中工作,并且只要所有类型都可以相互比较,就会执行您想要的操作。
template<typename T, typename R>
bool is_any_of(T t, R r)
{
return t == r;
}
template<typename T, typename R, typename... ARGS>
bool is_any_of(T t, R r, ARGS... args)
{
if (t == r)
{
return true;
}
else
{
return is_any_of(t, args...);
}
}
这更加紧凑,并且可以在 C++17 中工作
template<typename T, typename... ARGS>
bool is_any_of(T t, ARGS... args)
{
return ((t == args) || ...);
}
关于c++ - 用于检查值是否是其参数的辅助函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60086202/