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]
|
true
(
T
がアロケータ
Alloc
を使用する場合)、
false
(それ以外の場合)
(public static member constant) |
メンバ関数
|
operator bool
|
オブジェクトを
bool
に変換し、
value
を返す
(public member function) |
|
operator()
(C++14)
|
value
を返す
(public member function) |
メンバ型
| 型 | 定義 |
value_type
|
bool |
type
|
std:: integral_constant < bool , value > |
アロケータ使用構築
アロケータ
alloc
をある型
T
のコンストラクタに渡す3つの規約があります:
-
Tが互換性のあるアロケータを使用しない場合( std :: uses_allocator_v < T, Alloc > が false の場合)、allocは無視されます。 - それ以外の場合、 std :: uses_allocator_v < T, Alloc > が true であり、かつ
-
-
Tが 先頭アロケータ規約 を使用する場合( T ( std:: allocator_arg , alloc, args... ) として呼び出し可能)、uses-allocator構築はこの形式を使用する。 -
Tが 末尾アロケータ規約 を使用する場合( T ( args..., alloc ) として呼び出し可能)、uses-allocator構築はこの形式を使用する。 - それ以外の場合、プログラムは不適格となる(これは std :: uses_allocator_v < T, Alloc > が true であるが、型が2つの許可された規約のいずれにも従っていないことを意味する)。
-
-
特殊なケースとして、
std::pair
は、たとえ
std::uses_allocatorが false であっても(例: std::tuple とは異なり)、uses-allocator型として扱われます: 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 は、型が期待するuses-allocator構築の形式に一致する引数リストを準備するために使用できます。 |
(C++20以降) |
特殊化
ネストされた
allocator_type
を持たない
プログラム定義型
T
について、以下の要件のいずれかが満たされる場合、プログラムは
std::uses_allocator
を特殊化して
T
に対して
std::true_type
から派生させることができます:
-
Tは、第1引数として std::allocator_arg_t を、第2引数としてAllocを受け取るコンストラクタを持つ。 -
Tは、最終引数としてAllocを受け取るコンストラクタを持つ。
上記において、
Alloc
は
Allocator
を満たす型、または
std::experimental::pmr::memory_resource*
に変換可能なポインタ型です
(library fundamentals TS)
。
以下の特殊化は標準ライブラリによって既に提供されています:
|
(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)
|
指定された型が要求するuses-allocator構築の種類に一致する引数リストを準備する
(関数テンプレート) |
|
(C++20)
|
uses-allocator構築によって指定された型のオブジェクトを作成する
(関数テンプレート) |
|
指定されたメモリ位置でuses-allocator構築によって指定された型のオブジェクトを作成する
(関数テンプレート) |
|
|
(C++11)
|
多階層コンテナのための多階層アロケータを実装する
(クラステンプレート) |