Namespaces
Variants

std:: uses_allocator

From cppreference.net
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
Определено в заголовке <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::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) .

Следующие специализации уже предоставлены стандартной библиотекой:

специализирует 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
(специализация шаблона класса)
специализирует 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
(специализация шаблона класса)
специализирует std::uses_allocator type trait
(специализация шаблона класса)

Примечания

Этот метатип используется std::tuple , std::scoped_allocator_adaptor и std::pmr::polymorphic_allocator . Он также может использоваться пользовательскими аллокаторами или типами-обёртками для определения, способен ли сам конструируемый объект или член использовать аллокатор (например, является ли он контейнером), в этом случае аллокатор должен быть передан в его конструктор.

Смотрите также

тег, используемый для выбора конструкторов с поддержкой аллокатора
(тег)
подготавливает список аргументов, соответствующий варианту конструкции uses-allocator, требуемому данным типом
(шаблон функции)
создает объект заданного типа посредством конструкции uses-allocator
(шаблон функции)
создает объект заданного типа в указанном месте памяти посредством конструкции uses-allocator
(шаблон функции)
реализует многоуровневый аллокатор для многоуровневых контейнеров
(шаблон класса)