相关文章 zhuanlan.zhihu.com/p/589164471 www.jb51.net/article/236…
示例代码
#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)); // 指向自定义类的指针
std::shared_ptr<MyClass> class_ptr = std::make_shared<MyClass>(99);
anyVector.push_back(class_ptr);
// 从向量中检索值并进行类型转换
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;
}
else if (item.type() == typeid(std::shared_ptr<MyClass>)) {
auto myClassSharedPtr = std::any_cast<std::shared_ptr<MyClass>>(item);
std::cout << "Value from MyClass pointer: " << myClassSharedPtr->getValue() << std::endl;
}
}
// 记得释放 MyClass 对象的指针内存
for (auto& item : anyVector) {
if (item.type() == typeid(MyClass*)) {
delete std::any_cast<MyClass*>(item);
}
}
return 0;
}