Namespaces
Variants

std::any

ja.cppreference.net より
 
 
ユーティリティライブラリ
言語サポート
型サポート(基本型、RTTI)
ライブラリ機能テストマクロ (C++20)
プログラムユーティリティ
可変長引数関数
コルーチンサポート (C++20)
契約サポート (C++26)
三方比較
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

汎用ユーティリティ
関係演算子 (C++20で非推奨)
整数比較関数
(C++20)(C++20)(C++20)    
(C++20)
swapと型操作
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
共通語彙型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
 
ヘッダ <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)

非メンバー関数

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)
値のようなセマンティクスを持つ動的に割り当てられたオブジェクトを含むラッパー
(クラステンプレート)
値のようなセマンティクスを持つ動的に割り当てられたオブジェクトを含むポリモーフィックなラッパー
(クラステンプレート)