我需要使用辅助函数检查类型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-case
。
如何bool is_any_of()
在C ++ 11中实现可变参数函数?
如何使用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) || ...);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句