@ Александр C: Я понимаю :) И это твои усилия: p

аюсь написать разреженный матричный класс. Короче говоря,quadtree_matrix<T> это либо нулевая матрица, либо четверка(ne, nw, se, sw) изquadtree_matrix<T>.

В конечном итоге я хотел бы протестировать различные схемы распределения, поскольку это, вероятно, повлияет на производительность операций линейной алгебры. Так что я буду также шаблонquadtree_matrix на стандартный тип распределителя, так что я могу повторно использовать существующие распределители.

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

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

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

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

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

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

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

Способность к статическому приведениюA<T>::pointer вA<U>::pointer при условииU является доступной базойT ?Способность к статическому приведениюA<T>::pointer вA<U>::pointer при условииT является доступной базойU и «тип времени выполнения» (что бы это ни значило в данном контексте)U ?ТипA<void>::pointer (если это имеет смысл)?

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

Ответы на вопрос(2)

Ваш ответ на вопрос