问题描述
我想使用 range-v3 来枚举一个范围。该范围由 Cgal 使用 Cgal::Surface_mesh<K>::faces()
函数生成,该函数返回网格中面的范围。
但是,range-v3 不能将视图附加到右值范围,所以我做不到
mesh.faces() | ranges::views::enumerate
我可以将 mesh.faces()
的结果存储到一个临时文件中,然后使用它,但能够在一行中完成此操作会很酷。
有没有办法做到这一点?
解决方法
让我用一个简单的例子来演示
#include <vector>
#include <range/v3/all.hpp>
using namespace ranges;
static struct help_t{} help;
template<class C>
auto operator|(C const&c,help_t){return views::all(c);}
int main(){
std::vector<int>{1,2,3} | help | views::enumerate;
}
向量仅在 2 次调用 operator|
后才会被破坏。这隐藏了 range-v3 的危险,在这种情况下似乎没问题......如果他们不在 range-v3 中提供类似的东西(是吗?),即使名字很吓人,我仍然会警惕