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

  • 本文关键字:成员 是否 参数 c++ c++20
  • 更新时间 :
  • 英文 :


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

我想表达什么

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...))

我想表达什么

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

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

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

c++的17倍表达式应该足够了,这将展开你所期望的

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

演示

最新更新