Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Kiểu any trong Boost C++ (lưu trữ bất kỳ kiểu nào)


boost::any cho phép lưu trữ giá trị của bất kỳ kiểu nào (giống std::any C++17). Cần boost/any.hpp.

Ví dụ mã nguồn

#include <iostream>
#include <boost/any.hpp>
#include <string>
using namespace std;

int main() {
    boost::any a, b, c, d;
    
    a = 42;                    // int
    b = 3.14;                  // double
    c = string("Hello");       // string
    d = 'Z';                   // char
    
    // Truy xuất: phải biết kiểu chính xác
    cout << "int: "    << boost::any_cast<int>(a) << '\n';
    cout << "double: " << boost::any_cast<double>(b) << '\n';
    cout << "string: " << boost::any_cast<string>(c) << '\n';
    cout << "char: "   << boost::any_cast<char>(d) << '\n';
    
    // Sai kiểu -> ném boost::bad_any_cast
    try {
        cout << boost::any_cast<float>(a); // a là int, không phải float
    } catch (const boost::bad_any_cast& e) {
        cout << "Loi ep kieu: " << e.what() << '\n';
    }
    
    // Kiểm tra kiểu trước khi cast
    if (a.type() == typeid(int))
        cout << "a la int\n";
    
    return 0;
}

Đầu ra

int: 42
double: 3.14
string: Hello
char: Z
Loi ep kieu: boost::bad_any_cast: failed conversion using boost::any_cast
a la int

So sánh boost::any vs std::any (C++17)

Đặc điểmboost::anystd::any
Tiêu chuẩnBoost (C++03+)C++17
Header<boost/any.hpp><any>
APITương tựChuẩn hóa

Ứng dụng

  • Container chứa nhiều kiểu: vector<boost::any>
  • Hệ thống plugin, scripting bindings.
  • Thay thế union không an toàn kiểu.