C++17標準庫std::any
阿新 • • 發佈:2019-01-14
定義在any
標頭檔案中:#include <any>
是一個可用於任何型別單個值的型別安全的容器.
使用方法
#include <any>
#include <iostream>
int main() {
// 儲存任意型別的單個值
// 成員函式type():返回容器中的值的型別
// 非成員函式std::any_cast<T>():強制型別轉換
std::any a = 1;
std::cout << a.type().name() << ": " << std::any_cast< int>(a) << '\n';// i: 1
a = 3.14;
std::cout << a.type().name() << ": " << std::any_cast<double>(a) << '\n';// d: 3.14
// bad_any_cast
try {
a = 1;
std::cout << std::any_cast<float>(a) << '\n';
} catch (const std::bad_any_cast& a) {
std: :cout << e.what() << '\n';// bad any_cast
}
// has_value: 是否有值
any a = 1;
if (a.has_value()) {
std::cout << a.type().name() << std::endl;// i
}
// reset:清空容器
a.reset();
if (a.has_value()) {
std::cout << "no value\n";// no value
}
// pointer to contained data
a = 1 ;
int* i = std::any_cast<int>(&a);// 這裡有點奇怪
std::cout << *i << '\n';// 1
}
總結:
std::any a = 1;
: 宣告一個any
型別的容器,容器中的值為int型別的1a.type()
: 得到容器中的值的型別std::any_cast<int>(a);
: 強制型別轉換, 轉換失敗可以捕獲到std::bad_any_cast
型別的異常has_value()
: 判斷容器中是否有值reset()
: 刪除容器中的值std::any_cast<int>(&a)
: 強制轉換得到容器中的值的地址