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;
}