cpp17的std::any
时间: 2023-05-31 08:03:43 浏览: 71
std::any是C++17中引入的一种通用类型安全的容器,它可以存储任意类型的对象。具体来说,std::any可以存储任何可复制的类型,包括基本类型、自定义类型、STL容器等。
使用std::any,我们可以将任何类型的对象存储在同一个容器中,这样可以方便地实现多态性。同时,std::any还可以避免C++11中的类型擦除问题,因为它存储的对象类型是在运行时确定的。
std::any的基本用法是通过构造函数或赋值运算符将值存储在容器中,然后可以使用std::any_cast将其转换为指定类型的对象。如果尝试将存储的对象转换为不兼容的类型,则会抛出std::bad_any_cast异常。
下面是一个简单的示例,演示了如何使用std::any:
```c++
#include <iostream>
#include <any>
int main()
{
std::any a = 42;
std::cout << std::any_cast<int>(a) << std::endl;
a = std::string("Hello, world!");
std::cout << std::any_cast<std::string>(a) << std::endl;
// This will throw std::bad_any_cast exception
// std::cout << std::any_cast<int>(a) << std::endl;
return 0;
}
```
在上面的示例中,我们首先将整数值存储在std::any容器中,然后使用std::any_cast将其转换为int类型。然后,我们将一个字符串存储在容器中,并使用std::any_cast将其转换为std::string类型。最后,我们尝试将存储的字符串转换为int类型,这将导致std::bad_any_cast异常。
总之,std::any是C++17中非常有用的新特性,可以方便地实现多态性和类型安全。