【问题标题】:Using range-v3 with rvalue returned by cgal将 range-v3 与 cgal 返回的右值一起使用
【发布时间】:2021-05-26 17:23:36
【问题描述】:

我想使用 range-v3 来枚举一个范围。该范围由 CGAL 使用 CGAL::Surface_mesh<K>::faces() 函数生成,该函数返回网格中面的范围。

但是,range-v3 不能将视图附加到右值范围,所以我不能这样做 mesh.faces() | ranges::views::enumerate

我可以将mesh.faces() 的结果存储到一个临时文件中,然后使用它,但是能够在一行中完成这项工作会很酷。

有没有办法做到这一点?

【问题讨论】:

    标签: c++ cgal range-v3


    【解决方案1】:

    让我用一个简单的例子来演示

    #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 中提供类似的东西(是吗?),即使有一个可怕的名字,我仍然会警惕它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-11
      • 1970-01-01
      • 2018-12-15
      相关资源
      最近更新 更多