std::uses_allocator
來自 cppreference.com
定義於標頭檔案 <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 [靜態] |
如果 T 使用分配器 Alloc 則為 true,否則為 false(public static 成員常量) |
成員函式
operator bool |
將物件轉換為 bool,返回 value (公開成員函式) |
operator() (C++14) |
返回 value (公開成員函式) |
成員型別
型別 | 定義 |
value_type
|
bool |
型別
|
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 被視為使用分配器型別,即使對於 pair 而言
std::uses_allocator
為 false(不像例如 std::tuple):請參閱 std::pmr::polymorphic_allocator::construct 和 std::scoped_allocator_adaptor::construct 的 pair 特有過載(C++20 前)std::uses_allocator_construction_args(C++20 起)。
工具函式 std::make_obj_using_allocator 和 std::uninitialized_construct_using_allocator 可用於顯式建立遵循上述協議的物件,而 std::uses_allocator_construction_args 可用於準備與型別期望的使用分配器構造方式匹配的引數列表。 |
(C++20 起) |
[編輯] 特化
給定一個沒有巢狀 allocator_type
的程式定義型別 T
,如果滿足以下任一要求,程式可以特化 std::uses_allocator
以從 std::true_type 派生用於 T
-
T
具有一個建構函式,它將 std::allocator_arg_t 作為第一個引數,將Alloc
作為第二個引數。 -
T
具有一個建構函式,它將Alloc
作為最後一個引數。
在上述中,Alloc
是一個滿足 Allocator 或可轉換為 std::experimental::pmr::memory_resource* 的指標型別(庫基礎 TS) 的型別。
標準庫已提供以下特化
特化 std::uses_allocator 型別特性 (類模板特化) | |
特化 std::uses_allocator 型別特性 (類模板特化) | |
特化 std::uses_allocator 型別特性 (類模板特化) | |
特化 std::uses_allocator 型別特性 (類模板特化) | |
特化 std::uses_allocator 型別特性 (類模板特化) | |
特化 std::uses_allocator 型別特性 (類模板特化) | |
特化 std::uses_allocator 型別特性 (類模板特化) | |
特化 std::uses_allocator 型別特性 (類模板特化) | |
(C++11) (直到 C++17) |
特化 std::uses_allocator 型別特性 (類模板特化) |
特化 std::uses_allocator 型別特性 (類模板特化) | |
(C++11) (直到 C++17) |
特化 std::uses_allocator 型別特性 (類模板特化) |
[編輯] 註解
此型別特性由 std::tuple、std::scoped_allocator_adaptor 和 std::pmr::polymorphic_allocator 使用。它也可以由自定義分配器或包裝型別使用,以確定被構造的物件或成員本身是否能夠使用分配器(例如,是否為容器),在這種情況下,應將分配器傳遞給其建構函式。
[編輯] 參閱
(C++11) |
用於選擇分配器感知建構函式的標記 (標記) |
準備與給定型別所需的使用分配器構造方式匹配的引數列表 (函式模板) | |
(C++20) |
透過 uses-allocator 構造建立給定型別的物件 (函式模板) |
透過使用分配器構造在指定記憶體位置建立給定型別的物件 (函式模板) | |
(C++11) |
為多層容器實現多層分配器 (類模板) |