std::any
From cppreference.com
| ヘッダー <any> で定義 |
||
| class any; |
(C++17以降) | |
クラス any は、任意のコピー構築可能な型の単一の値を、型安全に保持するためのコンテナを記述します。
1)
any クラスのオブジェクトは、コンストラクタの要件を満たす任意の型のインスタンスを格納するか、空になります。これは any クラスのオブジェクトの状態と呼ばれます。格納されたインスタンスは、内包オブジェクトと呼ばれます。2つの状態は、両方が空であるか、両方が空でなく内包オブジェクトが等価である場合に等価となります。2) 非メンバ関数
any_cast は、内包オブジェクトへの型安全なアクセスを提供します。実装は、小さなオブジェクトに対する動的メモリ確保を避けることが推奨されますが、そのような最適化は std::is_nothrow_move_constructible が true を返す型にのみ適用できます。
目次 |
[編集] メンバ関数
any オブジェクトを構築する(公開メンバ関数) | |
any オブジェクトを代入する(公開メンバ関数) | |
any オブジェクトを破棄する(公開メンバ関数) | |
変更 | |
| 内包オブジェクトを変更し、新しいオブジェクトを直接構築する (公開メンバ関数) | |
| 内包オブジェクトを破棄する (公開メンバ関数) | |
2つの any オブジェクトを交換する(公開メンバ関数) | |
監視 | |
| オブジェクトが値を保持しているか確認する (公開メンバ関数) | |
内包する値の typeid を返す(公開メンバ関数) | |
[編集] 非メンバ関数
| (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; // any type 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'; // bad cast try { a = 1; std::cout << std::any_cast<float>(a) << '\n'; } catch (const std::bad_any_cast& e) { std::cout << e.what() << '\n'; } // has value a = 2; if (a.has_value()) std::cout << a.type().name() << ": " << std::any_cast<int>(a) << '\n'; // reset a.reset(); if (!a.has_value()) std::cout << "no value\n"; // pointer to contained data 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) |
オブジェクトを保持しているかもしれないし、していないかもしれないラッパー (クラステンプレート) |