使用带有 cgal 返回的右值的 range-v3

问题描述

我想使用 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 中提供类似的东西(是吗?),即使名字很吓人,我仍然会警惕

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...