【问题标题】:How to allocate CGAL's Halfedge struture in shared memory?如何在共享内存中分配 CGAL Halfedge 结构?
【发布时间】:2012-10-09 20:04:40
【问题描述】:

我想继续我之前的问题,该问题被误解为与 2D 几何有关,因此我没有得到令人满意的答案 (Share CGAL's geometry between processes in C++) 并再次询问,但这一次正确地强调,我在谈论3D Cgals 多面体几何。

在 CGAL 手册中,我读到可以实例化 HalfedgeDS。我想将它放在共享内存中,以便其他进程可以使用它(请注意,它必须在进程之间共享,而不是线程之间)。如何制作适合我需要的自定义分配器,以便我可以将其作为 Alloc 参数?还有其他参数——“Traits”和“Items”——通常你不必担心只使用顶级类。下面我发布了我在 CGALs 手册中找到的最有趣的片段,我认为这可能会有所帮助:

HalfedgeDS 是一个类模板,将被使用 作为其他类模板的参数,例如 CGAL::Polyhedron_3。 用于实例化的模板参数 HalfedgeDS 将由这个其他类提供 模板。因此,三个模板参数及其含义 是必须的。我们区分模板 HalfedgeDS 及其实例化。

请注意,我只对与 3D 几何相关的解决方案感兴趣。

【问题讨论】:

    标签: c++ geometry ipc shared-memory cgal


    【解决方案1】:

    我猜你有兴趣使用CGAL::HalfedgeDS_list,这是 Polyhedron 类默认使用的。作为 HalfedgeDS 概念的所有模型,它有一个分配器作为模板参数。

    然后使用共享内存分配器(如boost interprocess allocator)就可以完成这项工作。

    【讨论】:

    • 您的回答是我在这个问题和我之前的问题中概述的问题的出色摘要。不幸的是你没有写任何新东西:(
    • @danilo2 您是否尝试过使用 boost“进程间分配器”?这个分配器不是回答你的问题吗?
    • 可以使用这个分配器,但是我需要提供“Traits”和“Items”参数。问题是,我不知道我应该传递什么作为这些参数来初始化 HalfedgeDS? (或共享内存中带有 Halfedge 容器的 CGAL::Polyhedron_3)
    • typedef CGAL::Simple_cartesian<double> K; typedef CGAL::Polyhedron_3< K, CGAL::Polyhedron_items_3,CGAL::HalfedgeDS_default,My_allocator> My_polyhedron;
    • 感谢 sloriot 提供的这个技巧,但是您能否提供更多关于如何实现 My_allocator 的信息?根据 CGALs 文档““第四个参数 Alloc 需要 STL 容器类的标准分配器。” - 如何在共享内存上制作 std::allocator?当我尝试使用 boost 分配器时出现编译错误(说我需要标准一)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多