检查模板参数包的每个成员是否相等

Check each member of a template parameter pack for equality

所以,我已经有了一个可行的解决方案,但我想知道是否有任何其他方法可以解决这个问题,以防我遗漏一些明显而简单的东西。

我想表达的

if((a==c)||...)

其中c是参数包,a是变量。基本上我希望它扩展到

if( (a == c1) || (a == c2) ... etc)

作为一名 MRE

  template <typename A, typename... C>
  void foo(A a, C... c) const
  {
      if((a == c)||...)
        return;
  }

我最终采用的解决方案是

if (
    [](auto a, auto c1, auto c2)
      {
        return a.value == c1 || a.value == c2;
      }(a, c...))

What i want to express

if((a==c)||...)

where c is a parameter pack and a is a variable. Basically I want it expanded to

if( (a == c1) || (a == c2) ... etc)

C++17 fold expression 应该足够了,这将扩展你所期望的

template <typename A, typename... C>
  void foo(A a, C... c) 
  {
    if(((a == c)|| ...))
      return;
  }

Demo