如何在满足条件且 return 该值时停止中间的折叠表达式函数调用?
How to stop fold expression function calls in the middle when a condition is met and return that value?
我的函数 foo
、bar
、baz
定义如下:
template <typename ...T>
int foo(T... t)
{
return (bar(t), ...);
}
template <typename T>
int bar(T t)
{
// do something and return an int
}
bool baz(int i)
{
// do something and return a bool
}
我希望我的函数 foo
在 baz(bar(t)) == true
和 return 的值 bar(t)
发生时停止折叠。我怎样才能修改上面的代码才能做到这一点?
使用短路operator &&
(或operator ||
):
template <typename ...Ts>
int foo(Ts... t)
{
int res = 0;
((res = bar(t), !baz(res)) && ...);
// ((res = bar(t), baz(res)) || ...);
return res;
}
注:
(baz(res = bar(t)) || ...);
甚至会更短,但 IMO 不太清楚。
我的函数 foo
、bar
、baz
定义如下:
template <typename ...T>
int foo(T... t)
{
return (bar(t), ...);
}
template <typename T>
int bar(T t)
{
// do something and return an int
}
bool baz(int i)
{
// do something and return a bool
}
我希望我的函数 foo
在 baz(bar(t)) == true
和 return 的值 bar(t)
发生时停止折叠。我怎样才能修改上面的代码才能做到这一点?
使用短路operator &&
(或operator ||
):
template <typename ...Ts>
int foo(Ts... t)
{
int res = 0;
((res = bar(t), !baz(res)) && ...);
// ((res = bar(t), baz(res)) || ...);
return res;
}
注:
(baz(res = bar(t)) || ...);
甚至会更短,但 IMO 不太清楚。