C++ Library - <any>



The <any> header in C++17, provides a type safe container for single values of any type and allows to retrieve them in a safe manner. It is useful when the type of a variable cannot be determined at compile time, or when a function is expected to accept multiple types of input.

It holds a single instance of any type of value, and the type of the value is stored internally. It works like a type erased container, that hold objects of different types, as long as those types are copy constructible. However, the type information is not accessible at runtime unless you perform specific operations to extract or inspect it.

Including <any> Header

To include the <any> header in your C++ program, you can use the following syntax.

#include <any>

Functions of <any> Header

Below is list of all functions from <any> header.

Sr.No Functions & Description
1 operator=

It assigns any object.

2 emplace

It change the contained object, constructing the new object directly.

3 reset

It destroys contained object.

4 swap

It swaps two any objects.

5 has_value

It checks if object holds a value.

6 type

It returns the typeid of the contained value.

Determine the Type of the Value

In the following example, we are going to use the x initially to hold the integer and then reassigned to hold the string value, Then the type() function us used to check the type of the stored value.

#include <iostream>
#include <any>
#include <string>
int main() {
   std::any x = 1;
   if (x.type() == typeid(int)) {
      std::cout << "Integer value: " << std::any_cast < int > (x) << std::endl;
   }
   x = std::string("Welcome");
   if (x.type() == typeid(std::string)) {
      std::cout << "String value: " << std::any_cast < std::string > (x) << std::endl;
   }
   return 0;
}

Output

Following is the output of the above code −

Integer value: 1
String value: Welcome
Advertisements