名稱空間
變體
操作

std::any

來自 cppreference.com
< cpp‎ | 工具
 
 
 
 
定義於標頭檔案 <any>
class any;
(C++17 起)

any 類描述了一個型別安全的容器,用於儲存任意可複製構造型別的單個值。

1) any 類的物件儲存滿足建構函式要求的任何型別例項,或者為空,這被稱為 any 物件的*狀態*。儲存的例項被稱為所包含的物件。如果兩個狀態都為空,或者都非空且所包含的物件等價,則這兩個狀態等價。
2) 非成員函式 any_cast 提供對所包含物件的型別安全訪問。

鼓勵實現避免對小型物件進行動態分配,但這種最佳化只能應用於滿足 std::is_nothrow_move_constructible 返回 true 的型別。

目錄

[編輯] 成員函式

構造一個 any 物件
(公共成員函式) [編輯]
賦值一個 any 物件
(公共成員函式) [編輯]
銷燬一個 any 物件
(公共成員函式) [編輯]
修改器
更改所包含的物件,直接構造新物件
(公共成員函式) [編輯]
銷燬所包含的物件
(公共成員函式) [編輯]
交換兩個 any 物件
(公共成員函式) [編輯]
觀察器
檢查物件是否包含值
(公共成員函式) [編輯]
返回所包含值的 typeid
(公共成員函式) [編輯]

[編輯] 非成員函式

特化 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;
 
    // 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++17)
一種型別安全的帶判別聯合體
(類模板) [編輯]
(C++17)
可能包含或不包含物件的包裝器
(類模板) [編輯]