std::any
ja.cppreference.net より
| ヘッダ <any>
|
||
class any;
|
で定義されています (C++17以上) | |
クラス any は、任意のコピー構築可能 型の単一の値に対する型安全なコンテナを記述します。
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)
|
値のようなセマンティクスを持つ動的に割り当てられたオブジェクトを含むポリモーフィックなラッパー
(クラステンプレート) |