std::any的使用(C++17)
示例代码:

#include <iostream>
#include <vector>
#include <any>
#include <string>

class MyClass {
public:
    MyClass(int value) : m_value(value) {}
    int getValue() const { return m_value; }

private:
    int m_value;
};

int main() {
    std::vector<std::any> anyVector;

    // 存储不同类型的值到向量中
    anyVector.push_back(42); // 整数
    anyVector.push_back(3.14); // 浮点数
    anyVector.push_back(std::string("Hello")); // 字符串
    anyVector.push_back(new MyClass(100)); // 指向自定义类的指针

    // 从向量中检索值并进行类型转换
    for (const auto& item : anyVector) {
        if (item.type() == typeid(int)) {
            std::cout << "Integer value: " << std::any_cast<int>(item) << std::endl;
        }
        else if (item.type() == typeid(double)) {
            std::cout << "Double value: " << std::any_cast<double>(item) << std::endl;
        }
        else if (item.type() == typeid(std::string)) {
            std::cout << "String value: " << std::any_cast<std::string>(item) << std::endl;
        }
        else if (item.type() == typeid(MyClass*)) {
            MyClass* myClassPtr = std::any_cast<MyClass*>(item);
            std::cout << "Value from MyClass pointer: " << myClassPtr->getValue() << std::endl;
        }
    }

    // 记得释放 MyClass 对象的指针内存
    for (auto& item : anyVector) {
        if (item.type() == typeid(MyClass*)) {
            delete std::any_cast<MyClass*>(item);
        }
    }

    return 0;
}

08-20 16:15