Using std::any to store any value
C++ does not have a hierarchical type system like other languages (such as C# or Java) and, therefore, it does not have a possibility to store multiple types of value in a single variable like it is possible with type Object
in .NET and Java or natively in JavaScript. Developers have long time used void*
for that purpose, but this only helps store pointers to anything and is not type-safe. Depending on the end goal, alternatives can include templates or overloaded functions. However, C++17 has introduced a standard type-safe container, called std::any
, that can hold a single value of any type.
Getting ready
std::any
has been designed based on boost::any
and is available in the <any>
header. If you are familiar with boost::any
and have used it in your code, you can migrate it seamlessly to std::any
.
How to do it...
Use the following operations to work with std::any
:
- To store values, use the constructor or assign them directly to a
std::any
variable:
...