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]
|
若
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::pair
被视为使用分配器类型,即使
std::uses_allocator对 pair 为 false (不同于例如 std::tuple ):具体请参阅 std::pmr::polymorphic_allocator::construct 与 std::scoped_allocator_adaptor::construct (C++20 前) std::uses_allocator_construction_args (C++20 起) 的 pair 特化重载。
|
工具函数 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*
的指针类型
(库基础技术规范)
。
标准库已提供以下特化版本:
|
(C++11)
|
特化
std::uses_allocator
类型特征
(类模板特化) |
|
(C++11)
|
特化
std::uses_allocator
类型特征
(类模板特化) |
|
特化
std::uses_allocator
类型特征
(类模板特化) |
|
|
(C++11)
|
特化
std::uses_allocator
类型特征
(类模板特化) |
|
特化
std::uses_allocator
类型特征
(类模板特化) |
|
|
特化
std::uses_allocator
类型特征
(类模板特化) |
|
|
特化
std::uses_allocator
类型特征
(类模板特化) |
|
|
特化
std::uses_allocator
类型特征
(类模板特化) |
|
|
(C++11)
(until C++17)
|
特化
std::uses_allocator
类型特征
(类模板特化) |
|
特化
std::uses_allocator
类型特征
(类模板特化) |
|
|
(C++11)
(until C++17)
|
特化
std::uses_allocator
类型特征
(类模板特化) |
注释
此类型特征被 std::tuple 、 std::scoped_allocator_adaptor 和 std::pmr::polymorphic_allocator 使用。自定义分配器或包装类型也可通过它来确定被构造的对象或成员本身是否具备使用分配器的能力(例如是否为容器),在此情况下应将分配器传递给其构造函数。
参见
|
(C++11)
|
用于选择支持分配器的构造函数的标签
(标签) |
|
(C++20)
|
准备匹配给定类型所需的使用分配器构造风格的参数列表
(函数模板) |
|
(C++20)
|
通过使用分配器构造的方式创建给定类型的对象
(函数模板) |
|
在指定内存位置通过使用分配器构造的方式创建给定类型的对象
(函数模板) |
|
|
(C++11)
|
为多层容器实现多层分配器
(类模板) |