std:: uses_allocator
|
Определено в заголовке
<memory>
|
||
|
template
<
class
T,
class
Alloc
>
struct uses_allocator ; |
(начиная с C++11) | |
Если
T
имеет вложенный тип
allocator_type
, конвертируемый из
Alloc
, константа-член
value
равна
true
. В противном случае
value
равна
false
.
Содержание |
Шаблон вспомогательной переменной
|
template
<
class
T,
class
Alloc
>
constexpr bool uses_allocator_v = uses_allocator < T, Alloc > :: value ; |
(начиная с C++17) | |
Унаследовано от std:: integral_constant
Константы-члены
|
value
[static]
|
true
если
T
использует аллокатор
Alloc
,
false
в противном случае
(публичная статическая константа-член) |
Функции-члены
|
operator bool
|
преобразует объект в
bool
, возвращает
value
(публичная функция-член) |
|
operator()
(C++14)
|
возвращает
value
(публичная функция-член) |
Типы-члены
| Тип | Определение |
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 (в отличие от, например, std::tuple ): см. специализированные перегрузки для пар в 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 может использоваться для подготовки списка аргументов, который соответствует варианту uses-allocator конструирования, ожидаемому типом. |
(since C++20) |
Специализации
Для
програмно-определенного типа
T
, не имеющего вложенного
allocator_type
, программа может специализировать
std::uses_allocator
для наследования от
std::true_type
для
T
, если выполняется любое из следующих требований:
-
Tимеет конструктор, принимающий std::allocator_arg_t в качестве первого аргумента иAllocв качестве второго аргумента. -
Tимеет конструктор, принимающийAllocв качестве последнего аргумента.
В приведённом выше,
Alloc
— это тип, который удовлетворяет требованиям
Allocator
или является типом указателя, приводимым к
std::experimental::pmr::memory_resource*
(library fundamentals TS)
.
Следующие специализации уже предоставлены стандартной библиотекой:
|
(C++11)
|
специализирует
std::uses_allocator
type trait
(специализация шаблона класса) |
|
(C++11)
|
специализирует
std::uses_allocator
type trait
(специализация шаблона класса) |
|
специализирует
std::uses_allocator
type trait
(специализация шаблона класса) |
|
|
(C++11)
|
специализирует
std::uses_allocator
type trait
(специализация шаблона класса) |
|
специализирует
std::uses_allocator
type trait
(специализация шаблона класса) |
|
|
специализирует
std::uses_allocator
type trait
(специализация шаблона класса) |
|
|
специализирует
std::uses_allocator
type trait
(специализация шаблона класса) |
|
|
специализирует
std::uses_allocator
type trait
(специализация шаблона класса) |
|
|
(C++11)
(until C++17)
|
специализирует
std::uses_allocator
type trait
(специализация шаблона класса) |
|
специализирует
std::uses_allocator
type trait
(специализация шаблона класса) |
|
|
(C++11)
(until C++17)
|
специализирует
std::uses_allocator
type trait
(специализация шаблона класса) |
Примечания
Этот метатип используется std::tuple , std::scoped_allocator_adaptor и std::pmr::polymorphic_allocator . Он также может использоваться пользовательскими аллокаторами или типами-обёртками для определения, способен ли сам конструируемый объект или член использовать аллокатор (например, является ли он контейнером), в этом случае аллокатор должен быть передан в его конструктор.
Смотрите также
|
(C++11)
|
тег, используемый для выбора конструкторов с поддержкой аллокатора
(тег) |
|
(C++20)
|
подготавливает список аргументов, соответствующий варианту конструкции uses-allocator, требуемому данным типом
(шаблон функции) |
|
(C++20)
|
создает объект заданного типа посредством конструкции uses-allocator
(шаблон функции) |
|
создает объект заданного типа в указанном месте памяти посредством конструкции uses-allocator
(шаблон функции) |
|
|
(C++11)
|
реализует многоуровневый аллокатор для многоуровневых контейнеров
(шаблон класса) |