我有函式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并回傳bar(t)發生時的值。如何修改上面的代碼才能做到這一點?
uj5u.com熱心網友回復:
使用短路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 不太清楚。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/371191.html
上一篇:從模板引數包C 中解壓第一個引數
