Namespaces
Variants

std:: any

From cppreference.net
Utilities library
ヘッダーで定義 <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)

非メンバー関数

std::swap アルゴリズムを特殊化する
(関数)
(C++17)
含まれるオブジェクトへの型安全なアクセス
(関数テンプレート)
(C++17)
any オブジェクトを作成する
(関数テンプレート)

ヘルパークラス

型不一致時に 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++17)
型安全な判別共用体
(クラステンプレート)
(C++17)
オブジェクトを保持する場合と保持しない場合があるラッパー
(クラステンプレート)
(C++11)
一意のオブジェクト所有権セマンティクスを持つスマートポインタ
(クラステンプレート)
(C++26)
値のようなセマンティクスを持つ動的に割り当てられたオブジェクトを含むラッパー
(クラステンプレート)
値のようなセマンティクスを持つ動的に割り当てられたオブジェクトを含むポリモーフィックなラッパー
(クラステンプレート)