std::uses_allocator
| Определено в заголовочном файле <memory>
|
||
template< class T, class Alloc > struct uses_allocator; |
(начиная с C++11) | |
Если T имеет typedef элемент allocator_type, который может быть преобразован из Alloc или является псевдонимом std::experimental::erased_type (ТС основ библиотеки), константа-элемент value равна true. Иначе value равна false.
Шаблон вспомогательной переменной
<tbody> </tbody> template< class T, class Alloc > inline constexpr bool uses_allocator_v = uses_allocator<T, Alloc>::value; |
(начиная с C++17) | |
Унаследован от std::integral_constant
Константы элементы
value [static] |
true, если T использует аллокатор Alloc, false иначе (public static константа-элемент) |
Функции-элементы
operator bool |
преобразует объект в bool, возвращает value (public функция-элемент) |
operator() (C++14) |
возвращает value (public функция-элемент) |
Типы элементы
| Тип | Определение |
value_type
|
bool
|
type
|
std::integral_constant<bool, value>
|
Создание с использованием аллокатора
Существует три соглашения о передаче аллокатора alloc в конструктор некоторого типа T:
- если
Tне использует совместимый аллокатор (std::uses_allocator_v<T, Alloc>равно false), тогдаallocигнорируется. - иначе,
std::uses_allocator_v<T, Alloc>равно true, и
- если
Tиспользует соглашение о ведущем распределителе (вызывается какT(std::allocator_arg, alloc, args...)), тогда создание с использованием аллокатора использует эту форму - если
Tиспользует соглашение о концевом распределителе (вызывается какT(args..., alloc)), тогда создание с использованием аллокатора использует эту форму - иначе программа некорректна (это означает, что
std::uses_allocator_v<T, Alloc>равно true, но тип не соответствует ни одному из двух разрешённых соглашений)
- если
- В качестве особого случая std::pair рассматривается как тип, использующий аллокатор, хотя
std::uses_allocatorравен false для pair (в отличие, например, от std::tuple): смотрите специфичные для pair перегрузки std::pmr::polymorphic_allocator::construct и std::scoped_allocator_adaptor::construct (до C++20)std::uses_allocator_construction_args (начиная с C++20)
|
Вспомогательные функции std::make_obj_using_allocator и std::uninitialized_construct_using_allocator могут использоваться для явного создания объекта в соответствии с указанным выше протоколом, а std::uses_allocator_construction_args может использоваться для подготовки списка аргументов, который соответствует разновидности создания с использованием аллокатора, ожидаемой типом. |
(начиная с C++20) |
Специализации
Пользовательские специализации свойства типа std::uses_allocator разрешены для типов, которые не имеют typedef элемента allocator_type, но соответствуют одному из следующих двух требований:
Tимеет конструктор, который принимает std::allocator_arg_t в качестве первого аргумента иAllocв качестве второго аргумента.Tимеет конструктор, который принимаетAllocв качестве последнего аргумента.
В приведённом выше примере Alloc это тип, который соответствует Allocator или представляет собой тип указателя, преобразуемый в std::experimental::pmr::memory_resource* (ТС основ библиотеки).
Стандартная библиотека уже предоставляет следующие специализации:
| специализация свойств типа std::uses_allocator (специализация шаблона класса) | |
| специализирует свойство типа std::uses_allocator (специализация шаблона класса) | |
| специализирует свойство типа std::uses_allocator (специализация шаблона класса) | |
| специализирует свойство типа std::uses_allocator (специализация шаблона класса) | |
| специализирует свойство типа std::uses_allocator (специализация шаблона класса) | |
| специализирует свойство типа std::uses_allocator (специализация шаблона класса) | |
| специализирует свойство типа std::uses_allocator (специализация шаблона класса) | |
| специализирует свойство типа std::uses_allocator (специализация шаблона класса) | |
(C++11) (до C++17) |
специализация свойства типа std::uses_allocator (специализация шаблона класса) |
| специализация свойства типа std::uses_allocator (специализация шаблона класса) | |
Специализируется черта std::uses_allocator типа Оригинал: specializes the std::uses_allocator type trait Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (специализация шаблона класса) |
Примечание
Это свойство типа используется std::tuple, std::scoped_allocator_adaptor и std::pmr::polymorphic_allocator. Оно также может использоваться пользовательскими аллокаторами или типами-оболочками, чтобы определить, способен ли создаваемый объект или элемент сам использовать аллокатор (например, является ли он контейнером), и в этом случае аллокатор должен быть передан его конструктору.
Смотрите также
(C++11) |
объект типа std::allocator_arg_t, используемый для выбора конструкторов с учётом аллокатора (константа) |
(C++11) |
тип тега, используемого для выбора перегрузок конструктора с учётом распределителя (класс) |
| подготавливает список аргументов, соответствующий варианту создания с использованием аллокатора, требуемый данным типом (шаблон функции) | |
(C++20) |
создаёт объект данного типа с помощью конструирования с использованием аллокатора (шаблон функции) |
| создаёт объект данного типа в указанной области памяти с помощью конструирования с использованием аллокатора (шаблон функции) | |
(C++11) |
реализует многоуровневый аллокатор для многоуровневых контейнеров (шаблон класса) |