检查模板参数包的每个成员是否相等
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;
}
所以,我已经有了一个可行的解决方案,但我想知道是否有任何其他方法可以解决这个问题,以防我遗漏一些明显而简单的东西。
我想表达的
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;
}