【发布时间】:2021-01-13 05:53:53
【问题描述】:
我有以下块:
int i = 0;
std::apply([&](auto &&... args) mutable {
((ef = (i++ == id) ?
args.modifyEffectVec(ef, arr) : ef), ...);
}, EffectsTuple);
i++==id 时执行:args.modifyEffectVec(ef, arr)。我想在发生这种情况时记录下来,所以我知道它发生在哪个 i 上。我试过了
int i = 0;
std::apply([&](auto &&... args) mutable {
((ef = (i++ == id) ?
{
ALOGV(TAG, "modifying effect for id %d", id);
args.modifyEffectVec(ef, arr);
} : ef), ...);
}, EffectsTuple);
但我发现Why ternary operator does not support blocks?
我不确定如何用这个三元组代替 if,因为它发生在这个叫做折叠表达式的东西中
【问题讨论】:
-
与其把它变成一个块,为什么不把它放到它自己的 lambda 中并调用它呢?它可以进行日志调用并执行这段代码。
-
非常多毛,但我认为逗号运算符可以在这里工作:
/* cond */ ? (ALOGV(TAG, "modifying effect for id %d", id), args.modifyEffectVec(ef, arr)) : ...。也就是说,代码已经很复杂了,我认为如果将std::apply(...)提取到一个新函数中会更容易阅读。