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]
T 使用分配器 Alloc 则为 true ,否则为 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 可用于准备与类型期望的使用分配器构造风格相匹配的参数列表。

(C++20 起)

特化

对于没有嵌套 allocator_type 程序定义类型 T ,若满足以下任一要求,程序可特化 std::uses_allocator 使其对 T 派生自 std::true_type

  • T 拥有一个构造函数,其第一个参数接受 std::allocator_arg_t ,第二个参数接受 Alloc
  • T 拥有一个构造函数,其最后一个参数接受 Alloc

在上述内容中, Alloc 是一个满足 分配器 要求的类型,或是可转换为 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 类型特征
(类模板特化)
特化 std::uses_allocator 类型特征
(类模板特化)
特化 std::uses_allocator 类型特征
(类模板特化)
特化 std::uses_allocator 类型特征
(类模板特化)

注释

此类型特征被 std::tuple std::scoped_allocator_adaptor std::pmr::polymorphic_allocator 使用。自定义分配器或包装类型也可通过它来确定被构造的对象或成员本身是否具备使用分配器的能力(例如是否为容器),在此情况下应将分配器传递给其构造函数。

参见

用于选择支持分配器的构造函数的标签
(标签)
准备匹配给定类型所需的使用分配器构造风格的参数列表
(函数模板)
通过使用分配器构造的方式创建给定类型的对象
(函数模板)
在指定内存位置通过使用分配器构造的方式创建给定类型的对象
(函数模板)
为多层容器实现多层分配器
(类模板)