C++ 参考手册
- C++11
- C++14
- C++17
- C++20
- C++ 编译器支持情况表
- 独立与宿主实现
- C++ 语言
- C++ 关键词
- 预处理器
- C++ 标准库头文件
- 具名要求
- 功能特性测试 (C++20)
- 工具库
- 类型支持(基本类型、RTTI、类型特性)
- 概念库 (C++20)
- 错误处理
- 动态内存管理
- std::addressof
- std::allocator_traits
- std::default_delete
- std::allocator_arg_t
- std::allocator_arg
- std::weak_ptr
- std::enable_shared_from_this
- std::bad_weak_ptr
- std::unique_ptr
- std::scoped_allocator_adaptor
- std::auto_ptr
- std::destroy_at
- std::destroy
- std::destroy_n
- std::uninitialized_move
- std::uninitialized_value_construct
- std::owner_less
- std::shared_ptr
- std::to_address
- std::assume_aligned
- std::make_obj_using_allocator
- C 内存管理库
- 低层内存管理
- std::pmr::memory_resource
- std::allocator
- std::pointer_traits
- std::uses_allocator
- std::uses_allocator_construction_args
- std::uninitialized_construct_using_allocator
- std::pmr::polymorphic_allocator
- std::pmr::get_default_resource
- std::pmr::set_default_resource
- std::pmr::new_delete_resource
- std::pmr::null_memory_resource
- std::pmr::synchronized_pool_resource
- std::pmr::unsynchronized_pool_resource
- std::pmr::monotonic_buffer_resource
- std::pmr::pool_options
- std::raw_storage_iterator
- std::get_temporary_buffer
- std::return_temporary_buffer
- std::uninitialized_copy
- std::uninitialized_fill
- std::uninitialized_default_construct
- std::uninitialized_copy_n
- std::uninitialized_fill_n
- std::uninitialized_move_n
- std::uninitialized_default_construct_n
- std::uninitialized_value_construct_n
- std::construct_at
- std::align
- 注释
- 日期和时间工具
- 字符串库
- 容器库
- 迭代器库
- 范围库 (C++20)
- 算法库
- 数值库
- 输入/输出库
- 文件系统库
- 本地化库
- 正则表达式库
- 原子操作库
- 线程支持库
- 实验性 C++ 特性
- 有用的资源
- 索引
- std 符号索引
- 协程支持 (C++20)
- C++ 关键词
std::uses_allocator_construction_args
定义于头文件 <memory>
|
||
T 不是 std::pair 的特化 |
||
template< class T, class Alloc, class... Args > constexpr std::tuple</*see below*/> uses_allocator_construction_args( |
(1) | (C++20 起) |
T 是 std::pair 的特化 |
||
template< class T, class Alloc, class Tuple1, class Tuple2 > constexpr std::tuple</*see below*/> uses_allocator_construction_args( |
(2) | (C++20 起) |
template< class T, class Alloc > constexpr std::tuple</*see below*/> uses_allocator_construction_args( |
(3) | (C++20 起) |
template< class T, class Alloc, class U, class V > constexpr std::tuple</*see below*/> uses_allocator_construction_args( |
(4) | (C++20 起) |
template< class T, class Alloc, class U, class V > constexpr std::tuple</*see below*/> uses_allocator_construction_args( |
(5) | (C++20 起) |
template< class T, class Alloc, class U, class V > constexpr std::tuple</*see below*/> uses_allocator_construction_args( |
(6) | (C++20 起) |
准备以使用分配器构造的手段创建给定类型 T
对象所需的参数列表。
1) 此重载仅若
T
不是 std::pair
的特化才参与重载决议。返回按下列方式确定的 std::tuple :
- 若 std::uses_allocator_v<T, Alloc> 为
false
而 std::is_constructible_v<T, Args...> 为true
,则返回 std::forward_as_tuple(std::forward<Args>(args)...) - 否则,若 std::uses_allocator_v<T, Alloc> 为
true
而 std::is_constructible_v<T, std::allocator_arg_t, const Alloc&, Args...> 为true
,则返回 std::tuple<std::allocator_arg_t, const Alloc&, Args&&...>(std::allocator_arg, alloc, std::forward<Args>(args)...) - 否则,若 std::uses_allocator_v<T, Alloc> 为
true
而 std::is_constructible_v<T, Args..., const Alloc&> 为true
,则返回 std::forward_as_tuple(std::forward<Args>(args)..., alloc) - 否则,程序为病式
2) 此重载仅若
T
是 std::pair
的特化才参与重载决议。对于 T = std::pair<T1, T2> ,等价于
return std::make_tuple( std::piecewise_construct, std::apply( [&alloc](auto&&... args1) { return std::uses_allocator_construction_args<T1>( alloc, std::forward<decltype(args1)>(args1)...); }, std::forward<Tuple1>(x)), std::apply( [&alloc](auto&&... args2) { return std::uses_allocator_construction_args<T2>( alloc, std::forward<decltype(args2)>(args2)...); }, std::forward<Tuple2>(y)) );
3) 此重载仅若
T
是 std::pair
的特化才参与重载决议。等价于
return std::uses_allocator_construction_args<T>(alloc, std::piecewise_construct, std::tuple<>{}, std::tuple<>{} );
4) 此重载仅若
T
是 std::pair
的特化才参与重载决议。等价于
return std::uses_allocator_construction_args<T>( alloc, std::piecewise_construct, std::forward_as_tuple(std::forward<U>(u)), std::forward_as_tuple(std::forward<V>(v)) );
5) 此重载仅若
T
是 std::pair
的特化才参与重载决议。等价于
return std::uses_allocator_construction_args<T>( alloc, std::piecewise_construct, std::forward_as_tuple(pr.first), std::forward_as_tuple(pr.second) );
6) 此重载仅若
T
是 std::pair
的特化才参与重载决议。等价于
return std::uses_allocator_construction_args<T>( alloc, std::piecewise_construct, std::forward_as_tuple(std::move(pr).first), std::forward_as_tuple(std::move(pr).second));
参数
alloc | - | 使用的分配器。 |
args | - | 传递给 T 构造函数的参数。
|
x | - | 传递给 T 的 .first 的构造函数的参数 tuple 。
|
y | - | 传递给 T 的 .second 的构造函数的参数 tuple 。
|
u | - | 传递给 T 的 .first 的构造函数的单个参数。
|
v | - | 传递给 T 的 .second 的构造函数的单个参数。
|
pr | - | pair ,将其 .first 传递给 T 的 .first 的构造函数,并将其 .second 传递给 T 的 .second 的构造函数的
|
返回值
适合于传递给 T
构造函数的参数的 std::tuple 。
示例
本节未完成 原因:暂无示例 |
注意
重载 (2-6) 提供传入 std::pair 的分配器传播,它们不支持前导分配器或尾随分配器约定(不同于如使用前导分配器约定的 std::tuple )。
参阅
(C++11) |
检查指定的类型是否支持使用分配器的构造 (类模板) |
(C++20) |
以使用分配器构造的手段创建给类型的对象 (函数模板) |
以使用分配器构造的手段在指定的内存位置创建给定类型的对象 (函数模板) |