Существует два типа 3D-полисов в CGAL, Polyhedron и Nef_polyhedron. Бывший позволяет указать аллокатора в качестве четвертого шаблона:Как я могу использовать распределитель Interprocess Boost с CGAL Nef_polyhedron_3?
Однако 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, которые позволяют мне его восстановить.
EDIT: Глядя на это немного дальше, я заметил, ИМЕЕТСЯ конструктор из stucture 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
Беда в том, что, как представляется, устанавливаются только на основе времени компиляции - нужно только выделить конкретный буфер для полигонов я знаю, мне нужно отправить другой процесс.
EDIT 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
Я до сих пор неясно, как именно я подключаю это.
Marcos
Спасибо. Как я уже говорил выше, у Notf'3 нет поддержки пользовательских распределителей. Кроме того, я понимаю, что есть макрос (отсюда и мой комментарий о времени компиляции). Вы говорите, что можно добавить без особых проблем, но я действительно ищу что-то более конкретное, если это возможно. –
Еще одна идея, которую я хотел бы сделать, - добавить глобальный CGAL_ALLOCATOR, но иметь возможность установить его в определенном режиме. В режиме по умолчанию он просто передаст std :: allocator. Но в другом режиме он будет использовать статический буфер, который вы передали ранее. –