Namespaces
Variants

std:: uses_allocator

From cppreference.net
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
定義先ヘッダ <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::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)

以下の特殊化は標準ライブラリによって既に提供されています:

std::uses_allocator 型特性を特殊化する
(クラステンプレートの特殊化)
std::uses_allocator 型特性を特殊化する
(クラステンプレートの特殊化)
std::uses_allocator 型特性を特殊化する
(クラステンプレートの特殊化)
std::uses_allocator 型特性を特殊化する
(クラステンプレートの特殊化)
std::uses_allocator 型特性を特殊化する
(クラステンプレートの特殊化)
std::uses_allocator 型特性を特殊化する
(クラステンプレートの特殊化)
std::uses_allocator 型特性を特殊化する
(クラステンプレートの特殊化)
std::uses_allocator 型特性を特殊化する
(クラステンプレートの特殊化)
std::uses_allocator 型特性を特殊化する
(クラステンプレートの特殊化)
std::uses_allocator 型特性を特殊化する
(クラステンプレートの特殊化)
std::uses_allocator 型特性を特殊化する
(クラステンプレートの特殊化)

注記

この型特性は、 std::tuple std::scoped_allocator_adaptor 、および std::pmr::polymorphic_allocator によって使用されます。また、カスタムアロケータやラッパー型が、構築されるオブジェクトまたはメンバ自体がアロケータを使用できるか(例えばコンテナであるか)を判断するためにも使用され、その場合にはアロケータをそのコンストラクタに渡すべきです。

関連項目

アロケータ対応コンストラクタを選択するために使用されるタグ
(タグ)
指定された型が要求するuses-allocator構築の種類に一致する引数リストを準備する
(関数テンプレート)
uses-allocator構築によって指定された型のオブジェクトを作成する
(関数テンプレート)
指定されたメモリ位置でuses-allocator構築によって指定された型のオブジェクトを作成する
(関数テンプレート)
多階層コンテナのための多階層アロケータを実装する
(クラステンプレート)