【发布时间】:2019-11-24 13:42:00
【问题描述】:
简单地说,我如何以编程方式在 view 链结构上分支?
因为现在我能想到的只是#if,这不是一个好主意。
auto adaptor =
view::drop(x0)
#if branch1
| view::drop(x1)
#elif branch2
| view::filter(ft1)
#endif
| view::stride(s1);
更新
在谷歌上搜索了一段时间后,我认为现在唯一可用的选项是您必须将逻辑“混合”到 view::xxx_while 或任何具有可变 lambda 或其他内容的可预测视图中。
然而,事实证明它已经很不错了。
auto adaptor =
view::drop(x0)
| view::drop_while([captures](auto&&) mutable { ...blend it here... })
| view::filter([captures](auto&&) mutable { ..blend it here... })
| view::stride(s1);
无论如何,如果view::enable_if 将来可以使用,我认为代码看起来会比这更直接。
【问题讨论】:
-
我很难理解你的确切意思。你能举个例子吗?
-
@Fureeish 太丑了,不能放在首位。对不起。
-
鉴于视图是惰性的,它们的声明不应引入任何性能损失。在这种情况下,使用普通的
ifs 有什么问题?只需auto rng = prev | ...等等。范围不太适合这样的分支。它们是轻量级的,可以创建许多它们。未使用的通常不应占用太多(或有时任何)空间。 -
@Fureeish 希望应该有
view::enable_if:-) -
这些条件是常量表达式吗?