std::uses_allocator
| ヘッダ <memory> で定義 |
||
| template< class T, class Alloc > struct uses_allocator; |
(C++11以降) | |
T に Alloc から変換可能なネストされた型 allocator_type がある場合、メンバ定数 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 を返します。 (public member function) |
| operator() (C++14) |
value を返します。 (public member function) |
メンバ型
| 型 | 定義 |
value_type
|
bool |
type
|
std::integral_constant<bool, value> |
[編集] アロケータ使用構築
ある型 T のコンストラクタにアロケータ alloc を渡す3つの慣例があります
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 であるにもかかわらず、その型が許可された2つの慣例のいずれにも従っていないことを意味します)。
- 特殊なケースとして、std::pair は、std::tuple などとは異なり、ペアに対する
std::uses_allocatorが false であっても、アロケータ使用型として扱われます。std::pmr::polymorphic_allocator::construct および std::scoped_allocator_adaptor::construct(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 を T に対して std::true_type から派生するように特殊化することができます。
-
Tは、最初の引数として std::allocator_arg_t を取り、2番目の引数としてAllocを取るコンストラクタを持つ。 -
Tは、最後の引数としてAllocを取るコンストラクタを持つ。
上記において、Alloc は Allocator を満たす型であるか、または std::experimental::pmr::memory_resource* に変換可能なポインタ型(library fundamentals 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) |
アロケータ対応コンストラクタを選択するために使用されるタグ (タグ) |
| 与えられた型が必要とする uses-allocator 構築の種類に一致する引数リストを準備します (関数テンプレート) | |
| (C++20) |
uses-allocator 構築によって、与えられた型のオブジェクトを作成します (関数テンプレート) |
| uses-allocator 構築によって、指定されたメモリ位置に与えられた型のオブジェクトを作成します (関数テンプレート) | |
| (C++11) |
多階層コンテナのための多階層アロケータを実装します (クラステンプレート) |