Требования к типам указателей распределителя стандартных библиотек

Я пытаюсь написать класс разреженных матриц квадродерева. Короче говоря, quadtree_matrix является либо нулевой матрицей, либо четверкой (ne, nw, se, sw) из quadtree_matrix . . 12169] Я хотел бы в конце концов протестировать различные схемы распределения, поскольку это, вероятно, повлияет на производительность операций линейной алгебры. Поэтому я также буду использовать шаблон quadtree_matrix для стандартного типа распределителя, чтобы я мог повторно использовать существующие распределители.

Мне нужно будет выделить два разных типа данных: либо T , либо или узел , который содержит четыре указателя (либо на T, либо на узел). Для всех алгоритмов, которые я рассмотрю, Я точно знаю, каких данных ожидать, потому что знаю, каковы размеры подматриц, с которыми я сталкиваюсь на любом этапе алгоритма (мне даже не нужно хранить эти размеры).

Я, конечно, буду с использованием двух разных распределителей: это нормально, поскольку типы распределителей предоставляют шаблон rebind и конструктор копирования шаблона (и предназначены для использования в качестве типов значений, как члены get_allocator стандарта контейнеры предлагают путем возврата копии).

Проблема в том, что функции-члены распределителя используют определенный тип указателя , который не обязательно должен быть обычным указателем. Некоторые распределители (повышающие межпроцессорные распределители) широко используют эту функцию.

Если бы типы указателей распределителя были указателями разнообразия садов, у меня не было бы проблем: по крайней мере, Я мог бы использовать указатели, чтобы аннулировать и повторно интерпретировать их к нужному типу (либо node * , либо T * ). Я также мог бы использовать объединение (возможно, лучше).

Насколько я знаю, нет требований к POD для типов allocator :: pointer . Они должны быть только итераторами с произвольным доступом.

Теперь мой вопрос:

Учитывая шаблон класса распределителя A (или его эквивалент A :: rebind :: other ), есть ли гарантия на:

  1. Возможность статического преобразования A :: pointer в A :: pointer при условии, что U является доступной базой T ?
  2. Возможность статического преобразования A :: pointer в A :: указатель при условии T является доступной базой для U , а «тип времени выполнения» (что бы это ни значило в данном контексте) литейщика - U ?
  3. Тип A :: pointer (если это имеет смысл)?

Или есть решение моей проблемы, о котором я не думал?

8
задан Alexandre C. 25 March 2011 в 15:41
поделиться