std:: any
From cppreference.net
|
ヘッダーで定義
<any>
|
||
|
class
any
;
|
(C++17以降) | |
any
クラスは、
copy constructible
な型の単一値を格納する型安全なコンテナを記述します。
1)
any
クラスのオブジェクトは、コンストラクタ要件を満たすあらゆる型のインスタンスを格納するか、あるいは空であり、これは
any
クラスオブジェクトの
状態
と呼ばれます。格納されたインスタンスは包含オブジェクトと呼ばれます。両方とも空である場合、または両方とも空でなく包含オブジェクトが等価である場合、二つの状態は等価です。
2)
非メンバー関数
any_cast
は、格納されたオブジェクトへの型安全なアクセスを提供します。
通常、実装では、 std::is_nothrow_move_constructible が true である型に対して、スモールオブジェクト最適化(動的メモリ確保の回避)が適用されます。
目次 |
メンバー関数
any
オブジェクトを構築する
(public member function) |
|
any
オブジェクトを代入する
(public member function) |
|
any
オブジェクトを破棄する
(public member function) |
|
修飾子 |
|
|
含まれるオブジェクトを変更し、新しいオブジェクトを直接構築する
(public member function) |
|
|
含まれるオブジェクトを破棄する
(public member function) |
|
2つの
any
オブジェクトを交換する
(public member function) |
|
オブザーバー |
|
|
オブジェクトが値を保持しているかチェックする
(public member function) |
|
含まれる値の
typeid
を返す
(public member function) |
|
非メンバー関数
|
(C++17)
|
std::swap
アルゴリズムを特殊化する
(関数) |
|
(C++17)
|
含まれるオブジェクトへの型安全なアクセス
(関数テンプレート) |
|
(C++17)
|
any
オブジェクトを作成する
(関数テンプレート) |
ヘルパークラス
|
(C++17)
|
型不一致時に
any_cast
の値返却形式によって送出される例外
(クラス) |
注記
| 機能テスト マクロ | 値 | 標準 | 機能 |
|---|---|---|---|
__cpp_lib_any
|
201606L
|
(C++17) |
std::any
|
例
このコードを実行
#include <any> #include <iostream> int main() { std::cout << std::boolalpha; // 任意の型 std::any a = 1; std::cout << a.type().name() << ": " << std::any_cast<int>(a) << '\n'; a = 3.14; std::cout << a.type().name() << ": " << std::any_cast<double>(a) << '\n'; a = true; std::cout << a.type().name() << ": " << std::any_cast<bool>(a) << '\n'; // 不正なキャスト try { a = 1; std::cout << std::any_cast<float>(a) << '\n'; } catch (const std::bad_any_cast& e) { std::cout << e.what() << '\n'; } // 値の有無 a = 2; if (a.has_value()) std::cout << a.type().name() << ": " << std::any_cast<int>(a) << '\n'; // リセット a.reset(); if (!a.has_value()) std::cout << "値なし\n"; // 格納データへのポインタ a = 3; int* i = std::any_cast<int>(&a); std::cout << *i << '\n'; }
出力例:
int: 1 double: 3.14 bool: true bad any_cast int: 2 no value 3
関連項目
|
(C++11)
|
任意のコピー構築可能な呼び出し可能オブジェクトのコピー可能ラッパー
(クラステンプレート) |
|
(C++23)
|
指定された呼び出しシグネチャで修飾子をサポートする任意の呼び出し可能オブジェクトのムーブ専用ラッパー
(クラステンプレート) |
|
(C++17)
|
型安全な判別共用体
(クラステンプレート) |
|
(C++17)
|
オブジェクトを保持する場合と保持しない場合があるラッパー
(クラステンプレート) |
|
(C++11)
|
一意のオブジェクト所有権セマンティクスを持つスマートポインタ
(クラステンプレート) |
|
(C++26)
|
値のようなセマンティクスを持つ動的に割り当てられたオブジェクトを含むラッパー
(クラステンプレート) |
|
(C++26)
|
値のようなセマンティクスを持つ動的に割り当てられたオブジェクトを含むポリモーフィックなラッパー
(クラステンプレート) |