c++ - 用于检查值是否是其参数的辅助函数

标签 c++ c++11 c++17 variadic-templates variadic-functions

我需要使用辅助函数检查 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/

相关文章:

c++ - 为什么要在 if 条件下进行解析?

c++ - 起源 - 不变的还是新的类型?

c++ - 与任何类型的函数的接口(interface)

c++ - 我可以在std::find_if的并行版本中使用非平凡的可迭代迭代器吗?

c++ - std::optional 实现为 union vs char[]/aligned_storage

c++ - 数组地址

c++ - 如何在 C++20 中参数化模块?

java - 内部路径长度

C++:如何生成随机数,同时从给定缓存中排除数字

c++ - 使用 boost::program_options 来解析文本文件是个好主意吗?