【问题标题】:How can I use a Boost Interprocess allocator with a CGAL Nef_polyhedron_3?如何将 Boost Interprocess 分配器与 CGAL Nef_polyhedron_3 一起使用?
【发布时间】:2013-03-27 18:45:11
【问题描述】:

CGAL 中有两种类型的 3D 多边形,Polyhedron 和 Nef_polyhedron。前者允许将分配器指定为其第四个模板:

http://www.cgal.org/Manual/latest/doc_html/cgal_manual/Polyhedron/Chapter_main.html#Subsection_25.3.5

但是,Nef_polyhedron_3 似乎没有。

然而,它确实有 iostream 运算符,用于解析到/从内部字符串表示:

https://github.ugent.be/divhaere/cgal/blob/master/include/CGAL/Nef_3/SNC_io_parser.h

但这确实非常慢。

然而,看看那个 SNC 解析器代码,它似乎在内部仍然使用分配器作为其内部结构(一个 snc 对象)。但即使我可以将这些分配给我的静态缓冲区(以传递给另一个进程),我也看不到 Nef_polyhedron_3 构造函数或访问器函数中允许我重建一个的任何内容。

编辑:进一步研究一下,我注意到有一个 SNC 结构 https://github.ugent.be/divhaere/cgal/blob/master/include/CGAL/Nef_polyhedron_3.h 的构造函数:

Nef_polyhedron_3( const SNC_structure& W, SNC_point_locator* _pl, 
          bool clone_pl,
          bool clone_snc) {

并且 SNC_structure 使用分配器来分配其内部数据(但不分配给它自己):

https://github.ugent.be/divhaere/cgal/blob/master/include/CGAL/Nef_3/SNC_structure.h

问题是,这似乎只在编译时设置 - 我只需要为我知道需要发送到另一个进程的多边形分配一个特定的缓冲区。

编辑 2:我刚刚注意到 Nef_polyhedron_3 超类之一是 Handle_for:

class Nef_polyhedron_3 : public CGAL::Handle_for< Nef_polyhedron_3_rep<Kernel_, Items_, Mark_> >, 
             public SNC_const_decorator<SNC_structure<Kernel_,Items_,Mark_> >

在那里,它本身也使用了分配器:

https://github.ugent.be/divhaere/cgal/blob/master/include/CGAL/Handle_for.h

我仍然不清楚我到底是如何插入的。

马科斯

【问题讨论】:

    标签: boost interprocess cgal


    【解决方案1】:

    Nef_polyhedron_3 目前不支持自定义分配器。但是,可以通过 CGAL_ALLOCATOR 宏使 CGAL 使用不同的分配器。但是,这将影响所有可能过多的 CGAL 标头。但是,应该可以在现有代码中添加分配器支持而不会有太多麻烦。

    【讨论】:

    • 谢谢。正如我上面所说,意识到 Nef'3 没有自定义分配器支持。另外,我意识到有那个宏(因此我对上面的“编译时间”发表了评论)。你说应该可以添加没有太多麻烦,但如果可能的话,我真的在寻找更具体的东西。
    • 我的另一个想法是继续添加全局 CGAL_ALLOCATOR,但可以将其设置为特定模式。在默认模式下,它只会委托给 std::allocator。但在另一种模式下,它会使用您之前传递的静态缓冲区。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 2021-05-06
    相关资源
    最近更新 更多