std::any - cppreference.com
提供: cppreference.com
<tbody> </tbody>
|
|
(C++17以上) | |
any クラスは任意の型の単一の値に対する型安全なコンテナを表現します。
1) any クラスのオブジェクトはコンストラクタの要求を満たす任意の型のインスタンスを格納することができます。 また、空であることもできます。 これは any クラスの状態として参照されます。 格納されているインスタンスは被包含 (contained) オブジェクトと呼ばれます。 両者が空であるか、両者が空でなく格納されているオブジェクトが同等であれば、2つの状態は同等です。
2) 非メンバの any_cast 関数によって格納されているオブジェクトへの型安全なアクセスが提供されます。
処理系は小さなオブジェクトに対する動的確保を避けることが推奨されますが、そういった最適化は std::is_nothrow_move_constructible が true である型にのみ適用できます。
メンバ関数
any オブジェクトを構築します (パブリックメンバ関数) [edit] | |
any オブジェクトを代入します (パブリックメンバ関数) [edit] | |
any オブジェクトを破棄します (パブリックメンバ関数) [edit] | |
変更 | |
| 新しいオブジェクトを直接構築することで格納されているオブジェクトを変更します (パブリックメンバ関数) [edit] | |
| 格納されているオブジェクトを破棄します (パブリックメンバ関数) [edit] | |
2つの any オブジェクトを入れ替えます (パブリックメンバ関数) [edit] | |
観察 | |
| オブジェクトが値を保持しているかどうか調べます (パブリックメンバ関数) [edit] | |
格納されている値の typeid を返します (パブリックメンバ関数) [edit] | |
非メンバ関数
ヘルパークラス
例
#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 = 1; if (a.has_value()) { std::cout << a.type().name() << '\n'; } // reset a.reset(); if (!a.has_value()) { std::cout << "no value\n"; } // pointer to contained data a = 1; int* i = std::any_cast<int>(&a); std::cout << *i << "\n"; }
出力例:
i: 1 d: 3.14 b: true bad any_cast i no value 1