std::uses_allocator
ヘッダ <memory> で定義
|
||
template< class T, class Alloc > struct uses_allocator; |
(C++11以上) | |
T
が Alloc
から変換可能なまたは std::experimental::erased_type のエイリアスである (library fundamentals TS)メンバ型 allocator_type
を持つ場合、メンバ定数 value
は true です。 そうでなければ value
は false です。
目次 |
[編集] ヘルパー変数テンプレート
template< class T, class Alloc > inline constexpr bool uses_allocator_v = uses_allocator<T, Alloc>::value; |
(C++17以上) | |
std::integral_constant から継承
メンバ定数
value [静的] |
T がアロケータ Alloc を使用するならば true、そうでなければ false (パブリック静的メンバ定数) |
メンバ関数
operator bool |
オブジェクトを bool に変換します。 value を返します (パブリックメンバ関数) |
operator() (C++14) |
value を返します (パブリックメンバ関数) |
メンバ型
型 | 定義 |
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つの規約のいずれにも従っていない場合)、プログラムは ill-formed です。
-
- 特別なケースとして、 std::pair は、 (std::tuple などと異なり)
std::uses_allocator
は false だけれども、アロケータ使用型として扱われます。 std::polymoprhic_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
を持たないけれども以下の2つの要件のひとつを満たす型に対する型特性 std::uses_allocator のカスタム特殊化が許容されます。
T
が最後の引数として Alloc
を取るコンストラクタを持つ。上記において、 Alloc
は Allocator を満たす型または std::experimental::pmr::memory_resource* に変換可能なポインタ型 (library fundamentals TS)です。
以下の特殊化は標準ライブラリによってすでに提供されています。
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) |
アロケータ対応のコンストラクタを選択するために使用される std::allocator_arg_t 型のオブジェクト (定数) |
(C++11) |
アロケータ対応のコンストラクタのオーバーロードを選択するために使用されるタグ型 (クラス) |
指定された型によって要求されるアロケータ使用構築のフレーバにマッチする引数リストを準備します (関数テンプレート) | |
(C++20) |
アロケータ使用構築の手法によって指定された型のオブジェクトを作成します (関数テンプレート) |
アロケータ使用構築の手法によって指定されたメモリ位置に指定された型のオブジェクトを作成します (関数テンプレート) | |
(C++11) |
多段コンテナのための多段アロケータを実装します (クラステンプレート) |