std::any与std::list转换
时间: 2023-11-22 15:55:28 浏览: 94
数组和list相互转换
在C++17中引入了std::any和std::list两个新的STL容器。std::any是一个类型安全的容器,可以包含任何类型的对象,而std::list是一个双向链表容器。两者之间没有直接的类型转换,但可以通过一些方法实现转换。
首先,如果你需要将一个std::list对象存储到std::any中,可以使用std::make_any函数进行转换。例如:
```
std::list<int> my_list = {1, 2, 3};
std::any my_any = std::make_any<std::list<int>>(my_list);
```
在这个例子中,我们将my_list对象转换为一个std::any对象,并将其存储在my_any中。
反过来,如果你需要将一个std::any对象转换为std::list对象,可以使用std::any_cast函数进行转换。例如:
```
std::any my_any = 42;
int my_int = std::any_cast<int>(my_any); // my_int = 42
my_any = std::list<int>{1, 2, 3};
std::list<int> my_list = std::any_cast<std::list<int>>(my_any);
```
在这个例子中,我们首先将一个int类型的值存储到my_any对象中,并使用std::any_cast函数将其转换为int类型的变量。接下来,我们将一个std::list对象存储到my_any中,并使用std::any_cast函数将其转换为std::list对象。
需要注意的是,如果你使用std::any_cast函数时,std::any对象中存储的类型与你要转换的类型不匹配,会抛出std::bad_any_cast异常。所以,在使用std::any_cast函数时,一定要确保std::any对象中存储的类型与你要转换的类型匹配。
阅读全文